JRA
SDK-86
~ SYSTEM DESIGN KERNEL
MONITOR LISTINGS
Additional copies of this manual may Бе purchased from:
URDA, Inc.
4516 Henry Street, Suite 407
Pittsburgn, PA 15213
URDA retains the right to change the specifications at any time, without notice.
This product is manufactured by URDA, Inc. under license from Intel Corportation
Neither URDA or Intel makes any warranty of any kind with regard to this matenal, including, but not
limited to, the implied warranties of merchantability and fitness for a particular purpose. Neither
URDA, Inc. or Intel Corporation assumes any responsibility for any errors that may appear in this
document. Neither URDA, Inc. or Intel Corporation makes any commitment to update or to keep
current the information contained in this document.
Neither URDA, Inc. or Intel Corporation assumes any responsibility for the use of any circuitry
other than circuitry embodied in this product. No other patent licenses are implied.
Intel software products are copyrighted by and shall remain the property of Intel Corporation. Use,
duplication or disclosure is subject to restrictions stated in Intel's software license, or as defined in
ASPR 7-104.9(a)(9).
No part of this document may be copied or reproduced in any form or by any means without the
prior written consent of Intel Corporation.
The following is a trademark of Intel Corporation and its affiliates and may only be used to identify
products: MCS.
РВЕЕАСЕ
This manual contains (ће source listing Гог version 1.1 of both the Кеурад апа serial
monitor programs. Two listings are provided for each monitor program; a PL/M-86
source listing and an expanded source listing containing the assembly language
equivalent of each PL/M instruction.
| SDK-86 KEYPAD MONITOR
ay PL/M-86 SOURCE LISTING
g |
РЬ/М-86 COMPILER 50К86 KEYPAD MONITOR РАЛЕ
ISIS-II PL/M-86 V1.0 COMPILATION OF MODULE MONITOR
OBJECT MODULE PLACED IN :F1:KEYPAD.OBJ
COMPILER INVOKED BY: :F2:PLM86 :F1:KEYPAD.PLM LARGE ОРТІМІ2Е(2)
$TITLE(*SDK86 KEYPAD MONITOR’)
і ЗМОІМТУЄСТОВ
/* 00808020208480998283406099908980:080 89804884480844888:9409208945:0(0894980808929440930928
0Г809202848232288290448080480408084:9308080880882808000800520:080880023899:0899480844602 900808
50К-86 КЕҮРАР МОМІТОВ, V1.1
30 JUNE 1978
(C) 1978 INTEL CORPORATION. ALL RIGHTS RESERVED. NO PART OF
OF THIS PROGRAM OR PUBLICATION MAY BE REPRODUCED, TRANSMITTED,
TRANSCRIBED, STORED IN A RETRIEVAL SYSTEM, OR TRANSLATED INTO ANY
LANGUAGE, IN ANY FORM OR BY ANY MEANS, ELECTRONIC, MECHANICAL,
MAGNETIC, OPTICAL, CHEMICAL, MANUAL OR OTHERWISE, WITHOUT THE PRIOR
WRITTEN PERMISSION OF INTEL CORPORATION, 3065 BOWERS AVENUE, SANTA
CLARA, CALIFORNIA, 95051.
ABSTRACT
| THIS PROGRAM IS THE ROM BASED KEYPAD MONITOR FOR THE 50К-86.
w IT PROVIDES THE USER WITH A MODERATE LEVEL OF CAPABLILITY TO
EXAMINIE/MODIFY MEMORY AND REGISTERS AND CONTROL PROGRAM EXECUTION.
ENVIRONMENT
THE SDK KEYPAD MONITOR COMMUNICATES WITH THE USER VIA THE ONBOARD
KEYBOARD AND 7 SEGMENT DISPLAY.
PROGRAM ORGANIZATION
THE PROGRAM IS DIVIDED INTO 1 DATA AND 2 CODE MODULES:
1. DATA DECLARATION MODULE, GLOBAL DATA DECLARATIONS,
2. COMMON ROUTINES. LOWER LEVEL PROCEDURES
3. COMMAND MODULE. INDIVIDUAL COMMANDS AND OUTER BLOCK
ç CALLING GRAPH
>>COMMAND DISPATCH MODULE (OUTER BLOCK)
INDIVIDUAL COMMAND PROCEDURES
COMMON ROUTINES
GLOBAL DATA STRUCTURES
THE MONITOR MAINTAINS THE USER'S MACHINE STATE (REGISTERS) IN A
WORD ARRAY. THE REGISTERS ARE SAVED FROM THE USER'S STACK
AS PUSHED BY PLM86 INTERRUPT PROCEDURE.
POINTERS TO THE 50К-86 29920 ADDRESS SPACE ARE IMPLEMENTED WITH
POINTER STRUCTURES ALLOCATED AS 2 WORD STRUCTURES.
PL/M-36 COMPILER 50К86 KEYPAD MONITOR
./
1 MONITOR:DO;
/9 BEGINNING OF MODULE Ф/
/9 побоев оно ооо ооо ооо оо ооо оон ооо ооо ооо ооо ааа а ааа а ааа
0101002072 022000 2 02 000 010200 00 00 0 00 008 0 080080 208200 0808 000 0608 0 002000 00002 0020
GLOBAL DATA DECLARATIONS MODULE
ABSTRACT
THIS MODULE CONTAINS ALL THE GLOBAL DATA DECLARATIONS AND
LITERALS (EQUATES).
MODULE ORGAINIZATION
2222:2:22:22:222:2:222з3222
THE MODULE IS DIVIDED INTO 5 SECTIONS:
GLOBAL FLAGS, VARIBLES, EQUATES
I/O PORTS,MASKS,AND SPECIAL CHARS
1, UTILITY SECTIO
2. 1/0 SECTION
3. MEMORY ARGUMENTS SECTIONS
Ч, REGISTER SECTION
5. BOOT AND 8089:
9/
/8888989990989898849924
е UTILITY SECTION
SECTION
STRUCTURES FOR MEDIUM POINTERS
USER REGISTER SAVE AREA
BOOTSTRAP AND 8089 DESCRIPTOR
зозоросврозвововововево /
2 1 DECLARE
INTSVECTOR(5) POINTER;
3 1 DECLARE
MONITORS$STACKPTR WORD,
MONITORSSTACKBASE WORD;
4 1 DECLARE
СОРУЯТОНТ (?) BYTE DATA ('(С)
9 1 DECLARE
BRKI$FLAG BYTE,
BRKI$SAVE BYTE,
CHAR BYTE,
DISP(4) BYTE,
T BYTE,
END$OF F WORD,
WORD$MODE BYTE,
LAST$COMMAND BYTE;
6 1 DECLARE
TRUE LITERALLY "ОЕРН",
FALSE LITERALLY ‘OOOH’,
ADORS$FIELD LITERALLY "1",
DATASFIELD LITERALLY "0",
ОАТАЗВУТЕ LITERALLY '-1',
BLANK LITERALLY "1",
NOBLANK LITERALLY "0",
BREAKS$INST LITERALLY "ОССН?,
STEP$TRAP LITERALLY "0100Н",
USER$SINIT$SP LITERALLY "100Н",
1978 INTEL
/%
/%
INTERRUPT VECTORS %/
MONITOR SS SAVE ?/
СОДР");
/%
/®
/%
/%
ТВОЄ ІР ВВЕАК 5ЕТ ?/
INST BREAK SAVE %/
ONE CHAR LOOK AHEAD "/
DISPLAY ARRAY %/
/% END OFFSET ADDRESS %/
ADDR FIELD WORD OUTPUT #/
DATA FIELD WORD OUTPUT %/
DATA FIELD BYTE OUTPUT %/
BREAKPOINT TRAP ®/
SS TRAP FLAG MASK %/
USER STACK INITIAL %/
PL/M-86 COMPILER SDK86 KEYPAD MONITOR
NM WWW ка) Г fo
/а 9044088880890889409490900088888988984980898809988498209898928084608088488208080848204088084
100 002000 EER REE EER ERE REE EER ооо ооо во вз ватт еее RR зао егете аа
COMMON PROCEDURES
THIS MODULE CONTAINS THOSE LOWER LEVEL PROCEDURES CALLED BY HIGHE#
LEVEL ROUTINES.
MODULE ORGANIZATION
THIS MODULE CONTAINS THE FOLLOWING SECTIONS:
1. BASIC I/O SECTION
KB$DISPLAY DISPLAY TO LED FIELDS
KB$BLANK$DATA$FIELD BLANK DATA FIELD WITH PROMPTS
KBSBLANK$ADDR$FIELD BLANK ADDRESS FIELD WITH PROMPTS
КВУООТЗВҮТЕ OUTPUT А BYTE ТО DISPLAY
KBSOUT$WORD OUTPUT A WORD TO DISPLAY
KB$GET$CHAR INPUT A CHAR FROM KEYPAD
2. ARGUMENT EXPRESSION EVALUATOR
КВЗСЕТЗЕХРН GET WORD EXPRESSION
KB$GET$ADDR GET ADDRESS EXPRESSION
КВФОРОАТЕФІР GET OPTIONAL CS:IP
3. INTERRRUPT AND RESTORE/EXECUTE ROUTINES
SAVE$REGISTERS SAVES USERS REGISTERS
RESTORE$EXECUTE RESTORE MACHINE STATE AND EXEC
INTERRUPRI$SENTRY INTERRUPT FOR SINGLE STEP
INITERRUPT3$ENTRY INTERRUPT ROUTINE FOR GO
INIT$INT$VECTOR INITIALIZES INTERRRUPT VECTORS
#/
1% 00000 ово ава оваа но»
• BASIC І/О SECTION ы
ооо о ооо сссововонае /
KB$DISPLAY:
/а THIS ROUTINE DISPLAYS THE CONTENTS OF THE ARRAY POINTED TO BY
THE FIRST PARM TO THE FIELD SPECIFIED BY THE SECOND (ADDR OR
DATA). THE NUMBER OF DECIMAL POINTS OR PROMPTS IS DETERMINED
BY THE THIRD PARAMETER #/
PROCEDURE (PTR,FIELD, PROMPTS);
DECLARE PTR POINTER, (FIELD,PROMPTS,T) BYTE,
DISPLAY BASED PTR (1) BYTE;
ТЕ FIEUD=ADDR$FIELD THEN
OUTPUT(KB$STAT$PORT) = 94H; 79 ADDRESS FIELD %/
ELSE
OUTPUT(KB$STAT$PORT)
DO 1-0 TO 3;
Т = DISPLAY(3-I); /® DISPLAY ЗАСКИАРСО!
90H; /% DATA FIELD %/
IF PROMPTS>I THEN Т = т OR 80H;
OUTPUT(KB$DATA$PORT) = Т;
END;
END;
KB$BLANK$DATA$FIELD:
е;
PL/M-86 COMPILER SDK86 KEYPAD MONITOR PAGE
NNN
M ww ЕЈ
го лм fT ГО ЕЈ
N N кај Е Е ЈОЈ МОЈ ОЈ ГО го
-а
мом
/9 THIS ROUTINE BLANKS THE DATA FIELD OF THE DISPLAY WITH THE
NUMBER OF PROMPTS (DECIMAL POINTS) AS SPECIFIED BY THE PARAMETER. #/
PROCEDURE( PROMPTS);
DECLARE PROMPTS BYTE;
CALL KBS$SDISPLAY( ОКВЗВГАНКО, DATA$FIELD, PROMPTS);
END;
KBSBLANK$ADDRSFIELD:
/9 THIS PROCEDURE BLANKS THE ADDRESS FIELD OF THE DISPALY WITH THE
NUMBER OF PROMPTS SPECIFIED BY THE PARAMETER "РВОМРТ5", ®/
PROCEDURE( PROMPTS);
DECLARE PROMPTS BYTE;
CALL KB$DISPLAY( @KBSBLANKS, ADDR$FIELD, PROMPTS);
END;
KBSOUT$BYTE:
/® THIS ROUTINE OUTPUTS THE BYTE INPUT FROM THE FIRST PARAMETER
TO THE DATA FIELD WITH THE NUMBER OF PROMPTS SPECIFIED BY THE
SECOND PARAMETER. ?/
PROCEDURE(B, PROMPTS);
DECLARE (B,PROMPTS) BYTE;
DISP(0),DISP(1) з O; /% FIRST TWO BLANK %/
DISP(2) = LED(SHR(B,4) AND OFH);
DISP(3) = LED(B AND ОЕН);
CALL KB$DISPLAY( @DISP,DATA$FIELD,PROMPTS);
END;
KBSOUT$WORD:
/9 THIS ROUTINE OUTPUTS THE FIRST PARM TO THE FIELD SPECIFIED
BY THE SECOND WITH THE NUMBER OF PROMPTS SPECIFIED BY THE THIRD.
LEADING ZERO BLANKING IS PERFORMED IF SPECIFIED BY THE FOURTH
PARAMETER. */
PROCEDURE(W,FIELD, PROMPTS, BLANKING) ;
DECLARE W WORD, (FIELD,PROMPTS,BLANKING) BYTE;
DO 120 TO 3;
DISP(I) = ЕР(5НК(М,(3-1)94) AND ОООЕН);
END;
IF BLANKING=BLANK THEN /% BLANK LEADING 0'5 9/
00;
I з O:
,
DO WHILE DISP(I)=3FH AND І<3;
DISP(I) г O;
I = Із 15
END;
END;
CALL KB$DISPLAY(@DISP,FIELD,PROMPTS);
END;
KB$GET$CHAR:
/% READS ONE CHARACTER FROM THE FIFO ОР THE 8279, WAITS UNTIL
CHARACTER IS AVAILABLE AND THEN RETURNS THE CHARACTER IN GLOBAL
VARIABLE ‘CHAR’, 9/
PROCEDURE;
DO WHILE (INPUT(KB$STATS$PORT) AND KBSINRDY)=0; END;
ОПТРИТ ( КВЗЗТАТЗРОВТ) = ОЦОН; /® ENABLE ТМРОТ DATA ?/
CHAR = ТМРЏТ(КВЗОАТАЗРОВНТ); /% READ CHARACTER %/
ЕНО;
PL/M-86 COMPILER
SDK86 KEYPAD MONITOR | РАСЕ
СОФСОММАНО LITERALLY "2", /% GO COMMAND CODE #/
SS$COMMAND LITERALLY "3",
1% 20200 00000 ваа ава ааа аа ааа
Ы 1/0 DECLARATIONS SECTION 9
98899899080994089999090000909808/
7 1 DECLARE
KB$STAT$PORT LITERALLY ‘OFFEAH', /% STATUS/COMMAND PORT %/
КВУПрАТАРОНТ LITERALLY "ОРЕЕ8Н", /9 DATA PORT #/
KB$INIT$MODE LITERALLY "ООН?, /% 8 8-ВІТ, LEFT ENTRY,
< ENCODE, 2 KEY LOCKOUT #/
KB$INIT$SCAN LITERALLY "ЗЭН", /% 10MS SCAN RATE #/
KB$INRDY LITERALLY "ОТН?, из IN CHAR НОТ MASK #/
KB$CMND$PMT(®) BYTE DATA (40H,00H,00H,00H), /® "- то жу
KB$SIGNON( ®) BYTE DATA (40H,00H,7FH,7DH), /% "- 86" %/
KB$VERSION( є) BYTE DATA (00H,00H,86H,06H), /% ' 1,1" 9/
KB$REGS$PMT( 9) BYTE DATA (50H,00H,00H,00H), /% "В ' 8/
KBSERR$MSG( 9) BYTE DATA (40H,79H,50H,50H), /% "-ЕНН" ®/
КВЗЕХЕС( ®) BYTE DATA (79Н,00Н,00Н,00Н), /® "Е "жу
КВЗВАК (2) BYTE DATA (7СН,50Н,00Н,00Н), / "ВВ ' •/
KB$BLANKS( ®) BYTE DATA (00H,00H,00H,00H), /9 ' © жу
LED(®) BYTE DATA
(3FH,06H,5BH,4FH,66H,6DH,7DH,07H, ге IO tae Te жу
ТЕН,бЕН,77Н,7СН,39Н,5ЕН,79Н,71Н); ие "В: "Е" 9/
8 1 DECLARE
KBPER LITERALLY '108', /% PERIOD ./
КВСОМ LITERALLY '11Н', /% СОММА е /
KBREGKEY LITERALLY ‘15H’, /% REGISTER KEY 9 /
KBCOL LITERALLY "14Н", /9 COLON (SEGMENT) #/
KBPLUS LITERALLY '13Н', /% PLUS KEY е
KBMINUS LITERALLY ‘'12H'; /% MINUS KEY е/
1% 200000000000 000000000
е POINTER SECTION ы
9009099090908990909098900/
Э 1 DECLARE
MEMORYS$ARGI$PTR POINTER, /% ARGUMENT 1 %/
АКО! STRUCTURE (OFF WORD, SEG WORD)
АТ (@MEMORYSARGI$PTR),
MEMORY$ARG1 BASED MEMORY$ARGI$PTR BYTE,
MEMORY$WORD$ARG1 BASED MEMORY$ARGI$PTR WORD,
MEMORYS$ARG3$PTR POINTER, /% ARGUMENT 3 %/
ARG3 STRUCTURE (OFF WORD, SEG WORD)
АТ (@MEMORYS$ARG3$PTR),
MEMORY$ARG3 BASED MEMORY$ARG3$PTR BYTE,
MEMORY$BRKI$PTR POINTER, /® BREAKPOINT */
ВЕК! STRUCTURE (OFF WORD, SEG WORD)
АТ (@МЕМОВУЗВАКТЗРТЯ),
MEMORY$BRK1 BASED MEMORY$BRKI$PTR BYTE,
MEMORY$CSIP$PTR POINTER, /% CS:IP INSTRUCTION %/
CSIP STRUCTURE (OFF WORD, SEG WORD)
AT (@MEMORYS$CSIP$PTR),
PL/M-86 COMPILER SDK86 KEYPAD MONITOR PAG
MEMORYS$CSIP BASED MEMORYS$CSIP$PTR BYTE,
MEMORYSUSERSTACK$PTR POINTER,
USERSTACK STRUCTURE (OFF WORD, SEG WORD)
АТ (@MEMORY$USERSTACKS$PTR),
MEMORY$USERSTACK BASED MEMORYSUSERSTACKS$PTR WORD;
79 USER'S STACK #/
1% 220200 0002002 аа ва ваа аа
ы REGISTER SECTION Ы
аагававаааова даваа ваа /
а DECLARE
КВЗЯЕС( в) ВТТЕ DATA
(00Н,77Н,О00Н,7СН,0ОН,З39Н,00Н,5ЕН, /9 AXBXCXDX %/
60Н,73Н,7СН,73Н,60Н,30Н,5ЕН,30Н, /8 SPBPSIDI %/
39H,6DH,5EH,6DH,6DH,6DH,79H,6DH, /% CSDSSSES %/
30H,73H,71H, 38H), /% ТРЕ ./
REG$SAV(14) WORD, /9 USER'S SAVED АЕСЗ #/
REGS$ORD(®) BYTE DATA
(% 8,43 3 0 0.9 11 39.8 135, /® STACKED REG ORDER %/
SP LITERALLY 'REGS$SAV( 4)",
BP LITERALLY 'REG$SAV( 5)",
cs LITERALLY 'REG$SAV( 8)',
DS LITERALLY 'REG$SAV( 9)',
55 LITERALLY 'ВЕСЗЗАЧ( 10)",
Е5 LITERALLY " ВЕСЗЗАТ( 11)",
ТР LITERALLY " ВЕСЗАТ( 12)",
FL LITERALLY 'REG$SAV(13)';
/ + 20202 20000020000 00 00 ваа аа ааа ааа
® BOOTSTRAP JUMP AND 8089 VECTOR *
0122200200 02 000 20000 00000 060000 аа ааа ааа /
/® THIS BOOT CONSISTS OF A LONG JUMP TO THE BEGINNING OF THE MONITOR
АТ РРОО+ХХХХ WHERE XXXX IS THE STARTING ADDRESS OFFSET (IP) AND
MUST BE DETERMINED AFTER EACH COMPILE. Ф/
їз. 4 DECLARE
START$ADDR LITERALLY "009СН", /9 STARTING ADDRESS %/
ВООТ1(9) BYTE АТ (ОРЕРРОН) РАТА (ОВАН), /% LONG JUMP ОРСОРЕ #/
во0т2(#) WORD АТ (ОРРРЕТН) DATA (STARTS$ADDR),
BOOT3(®) WORD AT (OFFFF3H) DATA (OFFOOH); /® SEGMENT ADDRESS %/
/9 THIS TWO-WORD DATA IS A JUMP TO THE STARTING ADDRESS AND IS LOCATED
AT THE FIRST LOCATION OF ROM (NO OTHER DATA OR CONSTANT DECLARATIONS
MAY PRECEDE ІТ). THE JUMP IS ACTUALLY TO (START-ADDR)-4 SINCE THE
INSTRUCTION IS A RELATIVE JUMP OF LENGTH 3. Ф/
2 1 DECLARE
800Т8(9) WORD РАТА (OE99O0H,START$ADDR-u); /% МОР,ЈМР START-ADDR */
/9 THIS BLOCK. OF ROM AT FFFF6-FFFPA IS INITIALIZED FOR THE 8089
DEVICE AND POINTS TO A BLOCK OF RAM AT LOCATION 100H. #/
13 + DECLARE
BLOCK$8089 WORD AT (OFFFF6H) DATA (00001H),
BLOCK$8089$PTR POINTER AT (OFFFF8H) DATA (00100H);
к:
Р,/М-86 COMPILER SDK86 KEYPAD MONITOR
/б 898484989898889980999890889280992090928989380990282930234892808099808892049489020898808809
90000009 90090 о ооо о осо ооо оо ааа ооо ааа 509500 00060606 ааа аа аа ааа аа
COMMON PROCEDURES
222222222222222=22=
ABSTRACT
THIS MODULE CONTAINS THOSE LOWER LEVEL PROCEDURES CALLED BY HIGHER
LEVEL ROUTINES.
MODULE ORGANIZATION
22222222222222222=2
THIS MODULE CONTAINS THE FOLLOWING SECTIONS:
1. BASIC I/O SECTION
KB$DISPLAY DISPLAY TO LED FIELDS
KB$BLANK$DATA$FIELD BLANK DATA FIELD WITH PROMPTS
KB$BLANK$ADDR$FIELD BLANK ADDRESS FIELD WITH PROMPTS
KB$OUT$BYTE OUTPUT A BYTE TO DISPLAY
KBSOUTSWORD OUTPUT A WORD TO DISPLAY
КВЗСЕТЗСНАЯ INPUT A CHAR FROM KEYPAD
2. ARGUMENT EXPRESSION EVALUATOR
KB$GET$EXPR GET WORD EXPRESSION
KB$GET$ADDR GET ADDRESS EXPRESSION
KB$UPDATE$IP GET OPTIONAL С5:ТР
З, INTERRRUPT AND RESTORE/EXECUTE ROUTINES
SAVE$REGISTERS SAVES USERS REGISTERS
ВЕЗТОВЕЗЕХЕСЏТЕ RESTORE MACHINE STATE AND ЕХЕС
INTERRUPRI$SENTRY INTERRUPT FOR SINGLE STEP
INITERRUPT3$ENTRY INTERRUPT ROUTINE FOR GO
ТНТТЗТНТЗУЕСТОН INITIALIZES INTERRRUPT VECTORS
9/
/ФФееегеегееегевеееееееееегге
е BASIC I/O SECTION е
999080980899999909990980488/
14 1 КВУОТЗРЬАҮ:
/% THIS ROUTINE DISPLAYS THE CONTENTS OF THE ARRAY POINTED ТО BY
THE FIRST PARM TO THE FIELD SPECIFIED BY THE SECOND (ADDR OR
DATA). THE NUMBER OF DECIMAL POINTS OR PROMPTS IS DETERMINED
BY THE THIRD PARAMETER %/
PROCEDURE (PTR,FIELD, PROMPTS);
19 2 DECLARE PTR POINTER, (FIELD,PROMPTS,T) BYTE,
DISPLAY BASED PTR (1) BYTE;
16 2 ТЕ FIEUDsADDR$FIELD THEN
17 2 OUTPUT(KB$STAT$PORT) = 94H; и? ADDRESS FIELD %/
ELSE
18 2 ОЏТРОТ(КВЗ5ТАТЗРОВТ) = 90H; /% DATA FIELD ®/
19 2 00 1-0 TO 3;
20 3 T = DISPLAY(3-I); /® DISPLAY SACKWAPTS!
21 3 IF PROMPTS>I THEN Т = т OR ВОН;
23 3 OUTPUT(KB$DATA$PORT) = T;
24 3 END;
25 2 END;
25 1 KB$BLANK$DATA$FIELD:
PL/M-86 COMPILER SDK86 KEYPAD MONITOR PAGE
Мо N
-»
омо мо Ñ Гу го
юм ББ 45 чл) чл) № Г ла) кл) А Г)
са
мм
/* THIS ROUTINE BLANKS THE DATA FIELD ОР THE DISPLAY WITH THE
NUMBER OF PROMPTS (DECIMAL POINTS) AS SPECIFIED BY THE PARAMETER. #/
PROCEDURE( PROMPTS);
DECLARE PROMPTS BYTE;
CALL KBSDISPLAY( @KBSBLANKS, DATASFIELD, PROMPTS);
END; š
KB$BLANK$ADDR$FIELD:
/% THIS PROCEDURE BLANKS THE ADDRESS FIELD OF THE DISPALY WITH THE
NUMBER OF PROMPTS SPECIFIED BY THE PARAMETER "РВОМРТ5", 9?/
PROCEDURE( PROMPTS);
DECLARE PROMPTS BYTE;
CALL KBSDISPLAY( @KBSBLANKS, ADDR$FIELD, PROMPTS);
END;
KBSOUTSBYTE:
/% THIS ROUTINE OUTPUTS THE BYTE INPUT FROM THE FIRST PARAMETER
TO THE DATA FIELD WITH THE NUMBER OF PROMPTS SPECIFIED BY THE
SECOND PARAMETER. %/
PROCEDURE(B, PROMPTS);
DECLARE (B,PROMPTS) BYTE;
DISP(0),DISP(1) = 0; /9 FIRST TWO 3LANK ®/
DISP(2) = LED(SHR(B,4) AND ОРН);
DISP(3) = LED(B AND OFH);
CALL KB$DISPLAY( @DISP, DATA$FIELD, PROMPTS);
END;
KB$OUT$WORD:
/® THIS ROUTINE OUTPUTS THE FIRST PARM TO THE FIELD SPECIFIED
BY THE SECOND WITH THE NUMBER OF PROMPTS SPECIFIED BY THE THIRD.
LEADING ZERO BLANKING IS PERFORMED ТЕ SPECIFIED BY THE FOURTH
PARAMETER. %/
PROCEDURE(W,FIELD, PROMPTS, BLANKING);
DECLARE И WORD, (FIELD,PROMPTS,BLANKING) BYTE;
00 1:0 TO 3;
DISP(I) = LED(SHR(W,{(3-1)8%) AND OOOFH);
END;
ІР BLANKING=sBLANK THEN /% BLANK LEADING 0'5 Ф/
00;
I = O;
DO WHILE DISP(I)=3FH AND І<3;
DISP(I) = 0;
І з I 1;
END;
END;
CALL KB$DISPLAY( @DISP,FIELD, PROMPTS);
END;
КВЗСЕТЗСНАЯ:
/9 READS ONE CHARACTER FROM THE FIFO ОР THE 8279, WAITS UNTIL
CHARACTER IS AVAILABLE AND THEN RETURNS THE CHARACTER IN GLOBAL
VARIABLE ‘CHAR’. 9/
PROCEDURE;
DO WHILE (INPUT(KBSSTATS$PORT) AND KBSINRDY)=0; ZND;
OUTPUT(KBS$STATS$PORT) = ОЦОН; /% ENABLE INPUT DATA 2/
CHAR з INPUT(KBSDATASPORT); /9 READ CHARACTER "/
END;
PL/M-86 COMPILER SDK86 KEYPAD MONITOR PAGE
/94888848949408908948980890880889480848088:44:808900 0 панаваана
s ARGUMENT EXPRESSION EVALUATOR SECTION е
зроресзовововоововвоввввововозововововововаво /
62 1 КВЗОЕТЗЕХРИ:
/% THIS ROUTINE GATHERS CHARACTERS FROM THE INPUT STREAM
AND FORMS A WORD EXPRESSION WHICH IS RETURNED AS THE VALUE
OF THE PROCEDURE. THE CHARACTERS INPUT ARE ECHOED TO THE
ADDRESS OR DATA FIELD AS SPECIFIED BY THE FIRST PARAMETER.
IF THE FIRST PARM IS О (ADDR) OR 1 (DATA) THEN THE EXPRESSION IS
OUTPUT AS A WORD AND ТЕ -1 (DATA$BYTE) THEN AS A BYTE ALWAYS IN
DATA FIELD. THE NUMBER OF PROMPTS BY THE SECOND PARM, AND LEADING
ZERO BLANKING BY THE THIRD. EXPRESSION ARE TERMINATED WITH
А COMMA,PERIOD OR COLON. ‘CHAR’ WILL CONTAIN ONE OF THESE
ON EXIT. %/
PROCEDURE (FIELD,PROMPTS, BLANKING) WORD;
DECLARE (FIELD,PROMPTS,BLANKING) BYTE,
(SAVE,W) WORD, OPER BYTE;
©
МА)
го
ТЕ FIELD=DATA$BYTE THEN
CALL KB$OUT$BYTE(LOW( SAVE) ,PROMPTS);
ELSE
64 2 OPER = KBPLUS;
65 2 W з 0;
66 2 DO WHILE TRUE;
67 3 ТЕ CHARsKBREGKEY THEN
68 3 DO; /® REGISTER NAME ®/
69 4 CALL KB$DISPLAY( @KB$REG$PMT,FIELD,PROMPTS);
70 4 CALL KB$GET$CHAR;
71 4 IF CHAR>ODH THEN СОТО ERROR; /® INVALID REG KEY %/
73 4 SAVE = REG$SAV(CHAR);
4
4
76 4 CALL KB$OUT$WORD(SAVE,FIELD,PROMPTS,BLANKING);
77 4 CALL KB$GET$CHAR;
78 4 END;
ELSE
79 ро; /® NUMBER #/
80 ТЕ CHAR>OFH ТНЕМ СОТО ERROR; /* INVALID DIGIT #/
SAVE = 0;
DO WHILE CHAR<=0FH;
SAVE = SHL(SAVE,4) + DOUBLE( CHAR);
IF FIELD=DATA$BYTE THEN
CALL KBS$OUT$BYTE(LOW( SAVE) ,PROMPTS);
ELSE
а
295)
ЛАЛЕ Е во
87 5 CALL KB$OUT$WORD(SAVE,FIELD,PROMPTS,BLANKING);
68 5 CALL KB$GET$CHAR;
39 5 END;
30 4 END;
) 1 3 ТЕ OPER=KBPLUS THEN /% EVAL PREV OPER #/
32 3 Я = W + SAVE;
ELSE
93 3 W = И - SAVE;
9 4 3 ТЕ FIELD=DATA$BYTE THEN
95 3 CALL KB$OUT$BYTE(LOW(W),PROMPTS);
ELSE
35 CALL KB$OUT$WORD(W,FIELD,PROMPTS,BLANKING);
ТЕ CHAR=KBCOM OR CHAR=KBPER OR CHAR=KBCOL THEN
ке)
~
МА) МА)
Р,/М-86 COMPILER SDK86 KEYPAD MONITOR
98 3 RETURN W;
99 3 IF CHARsKBPLUS OR CHAR=KBMINUS THEN
100 3 OPER = CHAR;
ELSE
101 3 GOTO ERROR;
102 3 CALL KB$GET$CHAR; /% GET NEXT CHAR #/
103 3 END;
104 2 END;
105 1 KB$GET$ADDR:
/% THIS ROUTINE GATHERS CHARACTERS FROM THE INPUT STREAM AND
FORMS AN ADDRESS EXPRESSION OF SEGMENT PART AND OFFSET PART.
THE FIRST CHARACTER HAS ALREADY BEEN READ INTO GLOBAL "СНАП",
IF NO SEGMENT IS ENTERED, THE SECOMD PARM DEFAULT IS USED, THE
ADDRESS EXPRESSION IS DISPLAYED IN THE ADDRESS FIELD WITH THE
NUMBER OF PROMPTS SPECIFIED BY THE THIRD PARM, %/
PROCEDURE( PTR, DEFAULT$BASE, PROMPTS);
106 2 DECLARE PTR POINTER, DEFAULT$BASE WORD, PROMPTS BYTE,
ARG BASED PTR STRUCTURE (OFF WORD, SEG WORD);
107 2 ARG.SEG з DEFAULTS$BASE;
108 2 ARG.OFF = KB$SGETS$EXPR(ADDR$FIELD, PROMPTS, BLANK);
109 2 IF CHAR=KBCOL THEN /9 SEGMENT SPEC'D #/
110 2 00;
111 3 CALL КВЗСЕТЗСНААЯ;
112 3 ARG.SEG = ARG.OFF;
113 3 ARG.OFF = KB$GET$EXPR(ADDR$š$FIELD,PROMPTS,BLANK);
114 3 ТЕ CHARsKBCOL THEN GOTO ERROR;
116 3 END;
117 2 END;
118 1 КВЗОРРАТЕЗІР:
/а THIS ROUTINE IS CALLED BY SINGLE STEP AND GO TO OUTPUT THE CURRENT
CS: IP AND THE CURRENT INSTRUCTION BYTE. CS:IP IS OPENED FOR
OPTIONAL INPUT. Ф/
PROCEDURE;
119 2 CALL KB$SOUTS$WORD(IP,ADDR$FIELD,1,BLANK); /% DISPLAY ІР Ф/
120 2 CSIP.OFF = IP;
121 2 CSIP .SEG = CS;
122 2 CALL KB$SOUT$BYTE(MEMORY$CSIP,0);
123 2 CALL КВ9СЕТЭСНАВ;
124 2 ІР CHAR<>KBCOM AND CHAR<>KBPER THEN
125 2 DO; /® CHANGE CS:IP #/
126 3 CALL KB$SBLANKS$ADDRS$FIELD(1);
127 3 CALL KB$SBLANK$DATAS$FIELD(0);
128 3 CALL KBS$GETS$ADDR(@CSIP,CS,1);
129 3 END;
130 2 END;
120000020000 20000 00 аа ааа аа ааа аа ааа ааа аа а за
° INTERRUPT AND RESTORE/EXECUTE SECTION .
892808992:899999899899989994898923284999:249980848988889/
131 1 ЗАУЕӚВЕСІ5ТЕН5:
/% THIS ROUTINE IS USED ТО SAVE THE STACKED USER'S REGISTERS IN THE
MONITOR'S SAVE AREA. %/
PROCEDURE;
PAGE
2 /М-86 COMPILER
132
133
134
135
136
(37
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
193
154
155
156
157
158
159
160
fN го № лә о хл) г № Г
—
= Момо .2 мл) го
NNMN гу МА
REG$SAV( ВЕСЗОНО(Т)) = MEMORY$USERSTACK;
USERSTACK.OFF = USERSTACK.OFF + 2;
END;
SS = USERSTACK.SEG;
SP = USERSTACK.OFF;
END;
КЕЗТОНЕЗЕХЕСИТЕ:
/% THIS PROCEDURE RESTORES THE STATE O THE USER MACHINE AND
PASSES CONTROL BACK TO THE USER PROGRAM. IT CONTAINS A
MACHINE LANGUAGE SUBROUTINE TO PERFORM THE POPPING OF THE
USER REGISTERS AND TO EXECUTE AN 'IRET' TO TRANSFER CONTROL
TO THE USER'S PROGRAM. ?/
PROCEDURE;
DECLARE RESTORE$EXECUTE$CODE(*®) BYTE DATA
(08BH,OECH, /% MOV BP,SP ё;
O8BH,086H,002H, /8 МОМ АХ,/ВР/.РАВМ2 %/
08ВН,05ЕН,004Н, /8 MOV BX,/BP/.PARM1 %/
08EH, ODOH, /8 MOV SS,AX У,
ОВВН,ОЕЗН, /а МОУ 5Р,ВХ 8 /
0508, /9 POP ВР ./
05ЕН, /4 РОР DI ./
О5ЕН, /9 РОР 51 У,
058Н, /9 РОР ВХ ./
ОБАН, /8 POP DX 8 /
059Н, /% POP СХ ./
0588, /® POP АХ ./
ӘЛЕН, /% РОР DS ./
007H, /4 POP ES ./
ОСЕН) /9 IRET е/
RESTORE$EXECUTE$CODE$PTR WORD DATA ( .RESTORE$EXECUTE$CODE) ;
USERSTACK.SEG = SS;
USERSTACK.OFF = SP;
DO 1:0 TO 10; /® PUSH USER'S REGISTERS ONTO HIS STACK #/
USERSTACK.OFF = USERSTACK.OFF - 2;
MEMORY$USERSTACK = REG$SAV(REG$ORD(10-I));
END;
USERSTACK.OFF = USERSTACK.OFF - 2;
MEMORY$USERSTACK = BP;
CALL RESTORE$EXECUTE$CODE$PTR(USERSTACK.OFF,USERSTACK.SEG);
ND;
INTERRUPTI$ENTRY:
/% THIS PROCEDURE IS CALLED WHEN THE CPU IS INTERRUPTED BY ЕХЕСИТ, МС
AN INSTRUCTION WITH THE TRAP BIT SET (SINGLE STEP), %/
PROCEDURE INTERRUPT 1;
USERSTACK.OFF = STACKPTR;
USERSTACK.SEG = STACKBASE;
STACKPTR = MONITOR$STACKPTR;
STACKBASE = MONITOR$STACKBASE;
CALL SAVE$REGISTERS;
FL з FL AND (NOT STEPS$TRAP);
ТЕ LAST$COMMAND<>SS$COMMAND THEN
/9 SAVE USER STACK INFO #/
/9 CLEAR STEP FLAG #/
SDK86 KEYPAD MONITOR PAG
BP = MEMORY$USERSTACK;
USERSTACK.OFF = USERSTACK.OFF + Ц;
DO 120 TO 10; /% POP REGISTERS OFF CF STACK 9/
Р./М-86 COMPILER SDK86 KEYPAD MONITOR PAGE
161 2’ CALL ВЕЗТОЯЕЗЕХЕСУТЕ; /% CONTINUE IF NOT SS #/
162 2 CALL КВЗОРОАТЕЗІР;
163 2 ІР CHARsKBCOM THEN
164 2 DO;
165 3 IP = СЗІР,ОРЕ;
166 3 CS = CSIP.SEG;
167 3 FL = FL OR ЗТЕРЗТВАР; /8 SET STEP FLAG #/
168 3 CALL ВЕЗТОВЕЗЕХЕСУТЕ;
169 3 END; |
170 2 IF CHAR<>KBPER THEN GOTO ERROR;
172 2 GOTO AFTER$COMMAND;
173 2 END;
174 1 INTERRUPT3$ENTRY:
/а THIS PROCEDURE IS CALLED WHEN THE CPU EXECUTES A "ТНТ 3° INSTRUCTION.
THE MONITOR INSERTS THIS (OCCH) FOR A BREAKPOINT. ALSO AN EXTERNAL
INTERRUPT OR A USER SOFTWARE INTERRUPT MAY CAUSE THIS PROCEDURE TO BE
CALLED. ®/
PROCEDURE INTERRUPT 3;
175 2 USERSTACK.OFF = STACKPTR; /9 SAVE USER STACK INFO 8/
176 2 USERSTACK.SEG = STACKBASE;
177 2 ЗТАСКРТЯ = MONITOR$STACKPTR;
178 2 STACKBASE = MONITOR$STACKBASE;
179 2 CALL SAVE$SREGISTERS;
180 2 GOTO AFTER$INTERRUPT;
181 2 END;
182 1 ІМІТФІНТФфУЄСТОЯ:
/% THIS ROUTINE INITIALIZES АМ INTERRRUPT VECTOR AS FOLLOWS: THE OFFSET
FROM THE ADDRESS OF "ТМТЗВОЏТТМЕ" CORRECTED BY THE APPROPRIATE
NUMBER OF BYTES FOR THE INTERRUPT PLM PROLOGUE. THE SEGMENT FROM THE
CURRENT CS REGISTER IS DETERMINED BY A MACHINE LANGUAGE CODED
SUBROUTINE. %/
PROCEDURE( INT$SVECTORSPTR, INT$ROUTINESOFFSET) ;
183 2 DECLARE ТМТЗУЕСТОВЗРТА POINTER, ТМТЗНОЏТТНЕЗОРЕЗЕТ WORD,
VECTOR BASED INT$VECTOR$PTR STRUCTURE (OFF WORD, SEG WORD),
CORRECTION LITERALLY ‘19H’, /% OFFSET FOR PROLOGUE е /
INIT$SINT$SVECTOR$CODE(®) BYTE DATA
(0558, /% PUSH ВР 8 /
ОВВН ,ОЕСН, /® MOV ВР ,5Р е /
08СН,0С8Н, /9 MOV АХ, СЗ 8 /
ОСЧН,ОБЕН,ООЧН, /9 LES ВХ,/ВР/„РАВМ1 8 /
026H,089H,007H, /% MOV ES:W/BX/,AX 8/
050Н, /% POP ВР е /
0С2Н,004Н,00О0Н), из RET 4 * /
INIT$INT$VECTOR$CODE$PTR WORD DATA (.ІМІТ%ІМТ9УЕСТОВ9СОФЕ);
184 2 CALL INITSINTS$SVECTORSCODE$PTR( @VECTOR.SEG); /% SEGMENT PORTION 9/
185 2 VECTOR.OFF = INT$ROUTINESOFFSET - CORRECTION; /9 OFFSET PORTION #/
186 2 END;
/% 0020 000 00 000 00 00 000 00 ооо оо ааа аа аа аа аа а е а ааа а а а а а а а аа аа аа за
12022002 2021021 0 0100 22 0102 00082068 0000 ооо оо аа ааа аааа ааа ааа ааа ааа аа аа ва
COMMAND MODULE
PL/M-86 COMPILER SDK86 KEYPAD MONITOR PAGE
187
188
189
190
191
192
193
191
195
197
198
199
201
202
203
206
207
208
209
210
211
212
КА) КАЈ МАУ КАЈ МАЈ Www Www № № №
го
әм МУ ~
ABSTRACT
THIS MODULE CONTAINS ALL THE COMMANDS IMPLEMENTED AS INDIVIDUAL PROCEDURES
AND CALLED FROM THE OUTER BLOCK OF THE COMMAND DISPATCH LOOP.
MODULE ORGANIZATION
THIS MODULE CONTAINS THE FOLLOWING SECTIONS:
1. COMMANDS SECTION
KB$GO GO
KB$SINGLE$STEP SINGLE STEP
КВЗЕХАМЗМЕМ SUBSTITUTE MEMORY
КВЗЕХАМЗНЕО ЕХАМТМЕ REGISTER
KB$MOVE MOVE
КВФІМРОТ INPUT PORT
КВЗОЏТРОТ ОЏТРОТ PORT
2. COMMAND DISPATCH (OUTER BLOCK, MAIN PROGRAM LOOP)
NEXT$COMMAND DISPATCH
ERROR ERROR ROUTINE
ку
/ + 2000000 00 ово 00007 ев те че
? COMMANDS SECTION 8
гавававававананавана ааа /
KB$GO:
/* IMPLEMENTS THE 'GO' COMMAND. DISPLAYS IP AND CURRENT INSTRUCTION
BYTE AND OPENS CS:IP FOR INPUT AND ONE OPTIONAL BREAKPOINT.
BEGINS EXECUTION WHEN A PERIOD IS DEPRESSED AND DISPLAYS "Е" IN
THE ADDRESS FIELD. UPON ENCOUNTERING A BREAKPOINT, ‘BR’ IS
DISPLAYED IN THE DATA FIELD. %/
PROCEDURE;
CALL КВЗОРОАТЕ$ ІР; /% OPTIONAL CHANGE С5:ІР */
IF CHAR=KBCOM THEN
DO; / 9 BREAKPOINT ?/
CALL KB$BLANK$ADDR$FIELD(1);
CALL KB$BLANK$DATA$FIELD(O);
CALL KB$GET$CHAR;
CALL KB$GET$ADDR(@BRK1,CSIP.SEG,1);
IF CHAR<>KBPER THEN GOTO ERROR;
BRKI$SAVE = MEMORY$BRK1;
MEMORY$BRK1 = BREAK$INST;
IF MEMORY$BRK1<>BREAK$INST THEN GOTO ERROR;
BRKI$FLAG = TRUE;
IF CHAR<>KBPER THEN GOTO ERROR;
CALL KB$DISPLAY( @KB$EXEC,ADDR$FIELD,0O);
CALL KB$BLANK$DATA$FIELD(0);
IP = CSIP.OFF;
CS = CSIP.SEG;
FL з FL AND (NOT STEP$TRAP);
CALL RESTORE$EXECUTE;
END;
KB$SINGLE$STEP:
PL/M-86 COMPILER
222
223
224
225
226
228
229
230
831
232
233
234
236
237
238
239
240
242
243
245
246
247
248
250
697
253
254
256
257
258
259
260
261
д хә ә Го Го ГО
Www 42 Б Б БЕ о) 5 Е += = + ка) МА) МАЈ КА) КА) КА) МАМА ка) Г ГӘ МА ЕЈ —
Ме) м
—
/9 IMPLEMENTS THE SINGLE STEP COMMAND.
SDK86 KEYPAD MONITOR
CURRENT INSTRUCTION WORD. OPENS CS:IP FOR INPUT.
COMMA CAUSES THE MONITOR TO SINGLE STEP THE INSTRUCTION,
AND PERIOD TERMINATES THE COMMAND, %/
PROCEDURE;
CALL КВЗИРОАТЕЗТР;
ТЕ CHAR<>KBCOM THEN
= CSIP.OFF;
= CSIP.SEG;
FL = FL OR STEP$TRAP;
L ВЕЗТОКЕЗЕХЕСИТЕ;
КВЗЕХАМЗМЕМ:
/% IMPLEMENTS THE EXAMINE MEMORY COMMAND.
GOTO ERROR;
PAGE 12
DISPLAYS IP AND THE
DEPRESSINC
/9 OPTIONAL CHANGE OF CS:IP #/
/9 SET TRAP FLAG BIT IN PSW а/
PROMPTS FOR AN
ADDRESS AND THEN DISPLAYS THE BYTE OR WORD AT THAT LOCATION,
IT THEN IS OPTIONALLY OPENED FOR INPUT.
THE NEXT LOCATION. PERIOD TERMINATES. "/
PROCEDURE;
DECLARE W WORD;
CALL KBSBLANK$ADDR$FIELD(1);
CALL КВЗОЕТЗСНАА;
CALL KB$GETSADDR(@ARG1,CS,1);
IF CHAR<>KBCOM THEN
GOTO ERROR;
DO WHILE TRUE;
CALL KBSOUT$WORD( ARG1.OFF,ADDR$FIELD,0, BLANK) ;
ЇР WORD$MODE THEN
CALL KBSOUTSWORD( MEMORY $WORD$ARG1, DATASFIELD,1,NOBLANK) ;
ELSE
CALL КВЗООТЗВУТЕ( MEMORYS$ARG1,1);
CALL KB$GET$CHAR;
IF CHAR=KBPER THEN RETURN;
IF CHAR<>KBCOM THEN
IF WORD$MODE THEN
IF СНАЯ=КВРЕЯ THEN
DO;
W з KB$SGETSEXPR(DATA$FIELD,1,NOBLANK);
COMMA INCREMENTS 10
/% PROMPT FOR ADDRESS ®/
79 GET ADDRESS 9/
/% CLEAR PROMPT */
IF (CHAR<>KBCOM) AND (CHAR<>KBPER) THEN GOTO ERROR;
MEMORYSWORDSARG! з W;
IF MEMORY$WORDSARG1<>W THEN GOTO ERROR;
W = КВЗСЕТЗЕХРНА ( ОАТАЗВУТЕ, 1, МОВСАМК);
ТЕ (CHAR<>KBCOM) AND (CHAR<>KBPER) THEN GOTO ERROR;
MEMORYSARG1 = LOW(W);
ТР MEMORY$ARG1<>LOW(W) THEN
END;
GOTO ERROR;
RETURN;
IF WORD$MODE THEN
АВСТ,ОРР = АВСТ,ОРР + 2;
ELSE
ARG1.OFF = ARG1.OFF + 1;
END;
END;
KBSEXAM$REG:
/% IMPLEMENTS THE EXAMINE REGISTER COMMAND.
PROMPTS FOR A VALID
PL/M-86 COMPILER SDK86 KEYPAD MONITOR PAGE
0472 ЕВАОРЕ CALL KBOUTWORD
012:
88 5 CALL KB$GETS$CHAR;
; STATEMENT # 88
0475 E823FF CALL KBGETCHAR
89 5 END;
; STATEMENT # 89
0478 ЕВСО JMP 992
90 4 END;
91 3 ТЕ ОРЕВеКВРІО5 THEN /* EVAL PREV OPER 8/
92 3 W = W + SAVE;
; STATEMENT # 92
013:
ELSE
93 3 Ч = Я - SAVE;
; STATEMENT # 93
ОЧТА А1ША00 MOV AX,SAVE
0470 29064C00 SUB Я, АХ
014:
94 3 IF FIELD=DATA$BYTE THEN
; STATEMENT # 94
0481 ВОТЕОВЕЄ CMP ' BP]. .FIELD,OFFH
0485 750C JNZ 815
95 3 CALL KB$OUT$BYTE(LOW(W),PROMPTS);
; STATEMENT # 95
0487 А1%С00 MOV АХ, W
ОЧВА 50 PUSH AX 5-2
0488 FF7606 PUSH [ ВР] .РВОМРТЗ; 2
ОЧВЕ ES44FE CALL KBOUTBYTE
0491 ЕВ10 JMP @16
015:
ELSE
96 3 CALL KB$OUT$WORD(W,FIELD,PROMPTS,BLANKING);
; STATEMENT # 96
0493 FF364C00 PUSH W 51
0497 FF7608 PUSH [BP]).FIELD; 2
ОЧУА FF7606 PUSH | ВР) „РЕОМРТЗ; 3
0490 FF7604 РОЗН [BP].BLANKING; 4
ОЧАО E872FE CALL KBOUTWORD
016:
97 3 IF CHAR=KBCOM ОК CHAR=KBPER ОК CHAR=KBCOL THEN
; STATEMENT # 97
ОЦАЗ AOSAOO MOV AL,CHAR
ОЧАб 3С11 CMP AL,11H
ОЧАВ BOFF MOV AL,OFFH
O4AA 7401 JZ $+3H
ОЧАС 40 INC AX
O4AD 50 PUSH AX 1
ОЧАЕ ВОЗЕ5АООТО СМР CHAR,10H
0483 BOFF MOV AL,OFFH
0485 7401 JZ $+3H
0487 (40 INC AX
0488 59 POP СЕ 51
0489 ОАС1 OR AL, CL
O4BB 50 PUSH AX е 1
ОЧВС 803E5A0014 СМР CHAR, 14H
ОЦС1 BOFF MOV AL,OFFH
PL/M-86 COMPILER
04С3 7401 JZ $+3H
0465 340 ІМС АХ
04С6 59 РОР Сї
04С7 0АС1 OR AL,CL
0469 -0008 АСА AL, 1
04СВ 7305 JNB @17
98 3 RETURN W;
ОЧСО А14С00 MOV АХ, И
0400 ЕВ2В ЈМР 82
817:
99 3 IF CHAR=KBPLUS OR CHAR=KBMINUS ТНЕМ
0402 803Е5А0013 CMP CHAR,13H
0407 BOFF MOV AL,OFFH
0409 7401 JZ $+3H
0408 40 INC AX
очрс 50 PUSH AX
0400 803Е5А0012 CMP CHAR,12H
ОЧЕ2 BOFF MOV AL,OFFH
OBEN 7:01 JZ 3-3Н
0426 40 ЇНС АХ
04Е7 59 РОР СХ
08488 OAC! OR AL,CL
ОЦВА 0008 АСА AL,1
ОЦЕС 7203 JB $+5H
ОЗЕЕ Е9СВЕС JMP ERROR
100 3 OPER = CHAR;
ОЦРІ АО5АОО MOV AL, CHAR
ОЧРЧ А26300 MOV OPER, AL
ELSE
101 3 GOTO ERROR;
102 3 CALL KB$GET$CHAR;
ОЦЕТ бЕВАТРЕ CALL KBGETCHAR
103 3 END;
ОЦРА E9C6FE JMP 890
#91:
104 2 END;
82:
ОЧЕО 50 РОР ВР
ОЧЕЕ 020600 RET 6H
KBGETEXPR ENDP
105 1 KBSGET$ADDR:
IF NO SEGMENT [5 ENTERED,
NUMBER OF PROMPTS SPECIFIED BY THE THIRD PARM,
KBGETADDR PROC NEAR
0501 55 PUSH BP
/% THIS ROUTINE GATHERS CHARACTERS FROM THE INPUT STREAM
SDK86 KEYPAD MONITOR
we
—_
; STATEMENT # 98
; STATEMENT # 99
51
; STATEMENT 9 100
/% GET NEXT CHAR
; STATEMENT # 102
; STATEMENT # 103
; STATEMENT # 104
; STATEMENT # 105
PAGE
е/
FORMS AN ADDRESS EXPRESSION OF SEGMENT PART AND OFFSET PART,
THE FIRST CHARACTER HAS ALREADY BEEN READ INTO GLOBAL
THE SECOMD PARM DEFAULT IS USED,
"ОНАН".
ТНЕ
ADDRESS EXPRESSION IS DISPLAYED IN THE ADDRESS FIELD WITH THE
PL/M-86 COMPILER
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
37%
376
311
318
379
380
381
382
383
384
385
389
393
397
398
399
400
401
402
403
NNNNNMNNNNNN на са са са м
—
—
SDK86 KEYPAD MONITOR PAGE
OUTPUT(KB$STAT$PORT) = KB$INIT$SCAN;
CALL KB$DISPLAY(@KB$SIGNON,ADDR$FIELD,0); /% SIGN ОМ MESSAGE #/
CALL KB$DISPLAY( @KB$VERSION, DATA$FIELD,0O); /% VERSION NUMBER #/
/# INITIALIZE USER'S REGISTERS #/
CS,SS,DS,ES,FL,IP = 0;
SP = USER$INIT$SP;
CALL INITSINT$VECTOR( @INT$VECTOR(1),. INTERRUPTIS$SENTRY);
CALL LINIT$INTS$VECTOR( @INT$VECTOR(2),. INTERRUPT 3$ENTRY);
CALL INIT$INT$VECTOR( @INT$VECTOR(3),. INTERRUPT3$ENTRY);
BRKI$FLAG = FALSE;
MONITOR$STACKBASE = 5ТАСКВА5Е; /% SAVE MONITOR STACK VALUES ®/
MONITOR$STACKPTR = STACKPTR;
GOTO AFTER$ERROR;
NEXT$COMMAND:
/%
THIS IS THE PERPETUAL COMMAND LOOP WHICH DISPATCHES ТО EACH
COMMAND WHICH IS A SEPARATE PROCEDURE. #/
CALL KB$DISPLAY( @KB$CMND$PMT,ADDRS$FIELD,O);
AFTER$ERROR:
CALL KB$GET$CHAR;
CALL KB$BLANK$ADDR$FIELD(0);
CALL KB$BLANK$DATA$FIELD(0);
ТЕ (LAST$COMMAND:=CHAR)>O9H THEN GOTO ERROR;
WORD$MODE = FALSE;
DO CASE CHAR;
CALL КВЗЕХАМЗМЕМ;
CALL КВЗЕХАМЗНЕС ;
CALL KB$GO;
CALL KB$SINGLE$STEP;
CALL КВЗТМРИТ ;
CALL KB$OUTPUT;
CALL KB$MOVE;
DO; WORD$MODE TRUE; CALL КВФЕХАМӚМЕМ; END;
DO; WORD$MODE = TRUE; CALL КВУТМРИТ; END;
DO; WORD$MODE = TRUE; CALL KB$OUTPUT; END;
END;
AFTER$COMMAND:
ERROR:
/%
CALL KB$BLANK$DATA$FIELD(0);
GOTO NEXT$COMMAND;
THIS ROUTINE HANDLES ALL ERRORS DETECTED BY THE MONITOR AND WILL
OUTPUT THE ERROR MESSAGE TO THE DISPLAY AND THEN JUMP TO
"AFTER$ERROR' TO GET ANOTHER COMMAND, %/
CALL KB$DISPLAY( @KB$ERR$MSG,ADDR$FIELD,0O);
CALL KB$BLANK$DATA$FIELD(0);
GOTO AFTER$ERROR;
AFTER$INTERRUPT:
/а
THIS ROUTINE CHECKS FOR THE LAST COMMAND WHEN THE MONITOR IS
REENTERED VIA THE INTERRUPT VECTOR. %/
PL/M-86 COMPILER
404
405
406
407
408
409
410
411
412
413
414
415
IF
SDK86 KEYPAD MONITOR
BRKI$FLAG THEN
DO;
MEMORY$BRK1 = BRKI$SAVE;
BRKI$FLAG = FALSE;
IF ((1Р-1) AND OOOFH)=(BRK1.0FF AND OOOFH) AND
(SHR(IP-1,4)+CS)=(SHR(BRK1.0FF,4)+BRK1.SEG) THEN
DO;
IP = IP - 1;
CALL KB$DISPLAY( @KB$BRK1,DATA$FIELD,0O);
GOTO NEXT$COMMAND;
END;
END;
GOTO AFTER$COMMAND;
1 END MONITOR; /9 END OF MODULE #/
EOF
MODULE INFORMATION:
CODE AREA SIZE
CONSTANT AREA SIZE
VARIABLE AREA SIZE
MAXIMUM STACK SIZE
865 LINES READ
О PROGRAM ERROR(S)
0B82H 2946D
= OOOOH OD
= 0065H 1010
з 0050Н 800
END OF PLU/M-86 COMPILATION
PAGE
16
| 50К-86 КЕУРАО МОМІТОВ
яко | LJA EXPANDED SOURCE LISTING
Ç
P /M-86 COMPILER SDK86 KEYPAD MONITOR PAGE 1
ISIS-II PL/M-86 У1.0 COMPILATION OF MODULE MONITOR
NO OBJECT MODULE REQUESTED
COMPILER INVOKED BY: :F1:PLM86 :F1:KEYPAD.PLM LARGE OPTIMIZE(2) PAGEWIDTH(95) 4
CODE XREF МООВЈЕСТ PRINT(:F1:KEYPAD.PRT)
$TITLE(*SDK86 KEYPAD МОМІТОВ')
! $NOINTVECTOR
/9 пиво ооо ооо ооо ооо оно ооо ооо ооо ооо оо наа аа а ааа
ооо 555555555555 5525 4 455555555555 ЛЛ 5 4445444,
SDK-86 KEYPAD MONITOR, V1.1
30 JUNE 1978
(C) 1978 INTEL CORPORATION. ALL RIGHTS RESERVED. NO PART OF
OF THIS PROGRAM OR PUBLICATION MAY BE REPRODUCED, TRANSMITTED,
TRANSCRIBED, STORED IN A RETRIEVAL SYSTEM, OR TRANSLATED INTO ANY
LANGUAGE, IN ANY FORM OR BY ANY MEANS, ELECTRONIC, MECHANICAL,
MAGNETIC, OPTICAL, CHEMICAL, MANUAL OR OTHERWISE, WITHOUT THE PRIOR
WRITTEN PERMISSION OF INTEL CORPORATION, 3065 BOWERS AVENUE, SANTA
CLARA, CALIFORNIA, 95051.
ABSTRACT
ч THIS PROGRAM IS THE ROM BASED KEYPAD MONITOR FOR THE 50К-86.
IT PROVIDES THE USER WITH A MODERATE LEVEL OF CAPABLILITY TO
EXAMINIE/MODIFY MEMORY AND REGISTERS AND CONTROL PROGRAM EXECUTION.
ENVIRONMENT
THE SDK KEYPAD MONITOR COMMUNICATES WITH THE USER VIA THE ONBOARD
KEYBOARD AND 7 SEGMENT DISPLAY.
PROGRAM ORGANIZATION
THE PROGRAM IS DIVIDED INTO 1 DATA AND 2 CODE MODULES:
1. DATA DECLARATION MODULE. GLOBAL DATA DECLARATIONS.
2. COMMON ROUTINES. LOWER LEVEL PROCEDURES
| З. COMMAND MODULE. INDIVIDUAL COMMANDS AND OUTER BLOCK
ы CALLING GRAPH
>>COMMAND DISPATCH MODULE (OUTER BLOCK)
INDIVIDUAL COMMAND PROCEDURES
ч COMMON ROUTINES
GLOBAL DATA STRUCTURES
THE MONITOR MAINTAINS THE USER'S MACHINE STATE (REGISTERS) ТМ А
WORD ARRAY. THE REGISTERS ARE SAVED FROM THE USER'S STACK
AS PUSHED BY PLM86 INTERRUPT PROCEDURE.
POINTERS TO THE SDK-86 2%%20 ADDRESS SPACE ARE IMPLEMENTED WITH
PL/M=86 COMPILER
У;
/%
"у
50К86 KEYPAD MONITOR
POINTER STRUCTURES ALLOCATED AS 2 WORD STRUCTURES.
MONITOR: DO; /% BEGINNING OF MODULE #/
б8984804098585322482380923935305800884:23809929738999248008232:40230:34 32 86823290 2398 0
ооо ооо ооо ооо вооон оо ооо ооо ооо оо ооо ооо оао соосо
GLOBAL DATA DECLARATIONS MODULE
ABSTRACT
22222222
THIS MODULE CONTAINS ALL THE GLOBAL DATA DECLARATIONS AND
LITERALS (EQUATES).
MODULE ORGAINIZATION
2:222:2:222:222222222222
THE MODULE IS DIVIDED INTO 5 SECTIONS:
1. UTILITY SECTION GLOBAL FLAGS, VARIBLES, EQUATES
2, 1/0 SECTION
3. MEMORY ARGUMENTS SECTIONS
4, REGISTER SECTION
5. BOOT AND 8089 SECTION
STRUCTURES FOR MEDIUM POINTERS
USER REGISTER SAVE AREA
BOOTSTRAP AND 8089 DESCRIPTOR
1% 2220002 00 0 002 0000200020
в UTILITY SECTION е
099999492099290992888088/
2 1 DECLARE
ІНТФУЄСТОВ( 5) POINTER;
3 1 DECLARE
MONITOR$STACKPTR WORD,
MONITORS$STACKBASE WORD;
1/0 PORTS,MASKS,AND SPECIAL CHARS
/® INTERRUPT VECTORS %/
/% MONITOR SS SAVE ®/
PAGE
4 1 DECLARE
COPYRIGHT(®) BYTE DATA ('(C) 1978 INTEL CORP’);
5 1 DECLARE
BRKI$FLAG BYTE, /9 TRUE І? BREAK SET #/
BRKI$SAVE BYTE, /9 INST BREAK SAVE 9/
CHAR BYTE, /% ONE CHAR LOOK AHEAD %/
DISP(4) BYTE, 79 DISPLAY ARRAY %/
І BYTE,
ЕМОЗОЕЕ WORD, /% END OFFSET ADDRESS 9/
WORD$MODE BYTE,
LAST$COMMAND BYTE;
DECLARE
TRUE LITERALLY 'ОРРН’,
FALSE LITERALLY ‘OOOH’,
ADDRSFTIELD LITERALLY "1", /® ADDR FIELD WORD OUTPUT %/
ОАТАЗРТЕСО LITERALLY "0", /% DATA FIELD WORD OUTPUT %/
ОАТАЗВУТЕ LITERALLY "-1", /® DATA FIELD BYTE OUTPUT 9/
BLANK LITERALLY "1",
NOBLANK LITERALLY "0",
BREAK$INST LITERALLY "ОССН?, /% BREAKPOINT TRAP 9? /
STEP$TRAP LITERALLY '0100Н', /9 SS TRAP FLAG MASK %/
2
“ў
6
PL/M-86 COMPILER
USER$INIT$SP
GO$COMMAND
SS$COMMAND
SDK86 KEYPAD MONITOR
LITERALLY
LITERALLY
LITERALLY
'1008',
"274
“Зз
/90889889088:08804088308888948282830890004
1/0 DECLARATIONS SECTION
0890800828988908898020894080808084888908808/
КВЗОТАТЗРОНТ
КВФОАТАФРОВТ
KB$INIT$MODE
KB$INIT$SCAN
KB$INRDY
КВЗСМНОЗРМТ ( в)
KB$SIGNON(*)
КВЗУЕНЗТОН(#)
КВЗНЕСЗРМТ (#)
КВЗЕВАЗМ5О(8)
КВЗЕХЕС( в)
KB$BRK1(*)
КВЗВЕАНКЗ ( *)
LED(*)
(3FH,06H,5BH,4FH, 66H, 6DH,7DH,07H,
7FH,6FH,77H,7CH, 39H, 5EH, 79H, 71H);
KBPER
KBCOM
KBREGKEY
KBCOL
KBPLUS
KBMINUS
LITERALLY
LITERALLY
LITERALLY
LITERALLY
LITERALLY
BYTE DATA
BYTE DATA
BYTE DATA
BYTE DATA
BYTE DATA
BYTE DATA
BYTE DATA
BYTE DATA
BYTE DATA
LITERALLY
LITERALLY
LITERALLY
LITERALLY
LITERALLY
LITERALLY
/409048098:58:80:0:9008:88880408:
POINTER SECTION
0208806909098889:80884886008088/
7 1 DECLARE
8 1 DECLARE
8
3 1 DECLARE
MEMORY$ARGI$PTR
POINTER,
ARG1 STRUCTURE (OFF WORD,
АТ (@MEMORY$ARGI$PTR),
MEMORY$ARG1 BASED MEMORY$ARGI$PTR BYTE,
MEMORY$WORD$ARG1 BASED MEMORY$ARGI$PTR WORD,
MEMORY АВС 3$ РТВ
РОТМТЕЋ,
ARG3 STRUCTURE (ОРЕ WORD,
AT (@MEMORY$ARG3$PTR),
MEMORY$ARG3 BASED MEMORY$ARG3$PTR BYTE,
MEMORY$BRK1I$PTR
POINTER,
BRK1 STRUCTURE (OFF WORD,
АТ (@MEMORYS$BRK1$PTR),
MEMORY$BRK1 BASED MEMORY$BRKI$PTR BYTE,
MEMORY$CSIP$PTR
POINTER,
CSIP STRUCTURE (OFF WORD,
‘OFFEAH',
"ОЕЕЕВН",
"ООН",
'39Н',
"07Н",
(ВОН, ООН, ООН, ООН),
(ЗОН, ООН, 7ЕН, ТОН),
(00H,00H,86H,06H),
(50H,00H,00H,00H),
(40Н,79Н,50Н,50Н),
(79Н,ООН,ООН,ООН),
(7СН,50Н,ООН,ООН),
(ООН, ООН, оон,оон),
"тон",
'11Н',
'15Н',
"14Н",
“13Н",
"јен;
SEG WORD)
SEG WORD)
SEG WORD)
SEG WORD)
/% USER STACK INITIAL #/
GO COMMAND CODE #/
/%
/% STATUS/COMMAND PORT %/
/% DATA PORT %/
/%
ЕМСОРЕ,
1045 SCAN RATE
/%
8 8-ВІТ,
РАСЕ
LEFT ENTRY,
2 KEY LOCKOUT #/
8 /
IN CHAR RDY MASK #/
.. ' ./
.- 86" #/
ы 1 ° 1 Е #
' R е жу
"-БКИА" #/
"Е ` ./
"ВВ ' 8,
, " ./
PERIOD
COMMA
REGISTER KEY
COLON (SEGMENT)
PLUS KEY
MINUS KEY
/9 ARGUMENT 1 2/
/ %4
/ %
/®
BREAKPOINT
ARGUMENT 3 #/
”/
CS:IP INSTRUCTION %/
3
PL/M-86 COMPILER
SDK86 KEYPAD MONITOR
AT (@MEMORY$CSIP$PTR),
MEMORY$CSIP BASED MEMORY$CSIP$PTR BYTE,
MEMORY$USERSTACK$PTR POINTER,
USERSTACK STRUCTURE (OFF WORD,
АТ (@MEMORYSUSERSTACKS$PTR),
MEMORYSUSERSTACK BASED МЕМОЯУЗОЗЕЯЗТАСКЗРТА WORD;
/ 20022200 2020200002 0002225
, REGISTER SECTION
809080889989929992938928008/
DECLARE
KB$REG( ®)
(00H,77H,00H,7CH, ООН, 39H, ООН, SEH,
6DH,73H,7CH, 73H, 6DH, ЗОН, 5EH, 30H,
39Н,60Н,5ЕН,60Н,60Н,60Н,79Н,60Н,
30H,73H,71H,
REG$SAV(14)
REGS$ORD( Ф)
(7,6,1,3,2,0,
BYTE DATA
38H),
WORD,
BYTE DATA
9.11,12.8,
LITERALLI
LITERALLY
LITERALLY
LITERALLY
LITERALLY
LITERALLY
LITERALLY
LITERALLY
13),
' ВЕСЗЗАУ(
' ВЕСЗЗАУ(
" АЕСЗЗАУ(
"ВЕСЗЗАУ(
79 USER'S STACK
SEG МОВО)
/% USER'S
/9 STACKED REG ORDER
4)",
2
8
9
'REG$SAV(11
'REG$SAV( 12
'REG$SAV(13
/1830889488999099099029080892949923840989988282089
Ч BOOTSTRAP JUMP AND 8089 VECTOR е
ваввававав ово во ваа ааа аа ааа а аа ааа аа ее /
)',
к,
У“
"ЯЕСУЗАУ( 10)",
ж;
2%
) "3
AXBXCXDX
SPBPSIDI
CSDSSSES
IPFL
SAVED REGS
8 /
”у
* 7
./
°/
# /
./
/9 THIS BOOT CONSISTS OF A LONG JUMP TO THE BEGINNING OF THE MONITOR
АТ ЕРОО+ХХХХ WHERE ХХХХ IS THE STARTING ADDRESS OFFSET (ІР) AND
MUST BE DETERMINED AFTER EACH COMPILE. %/
DECLARE
ЗТАВТЗАООН LITERALLY
80071( е)
80072( 8)
800Т3(9)
/% THIS TWO-WORD РАТА IS A JUMP
АТ THE FIRST LOCATION OF ROM
THE JUMP 15
MAY PRECEDE IT).
DECLARE
BOOT4( ё)
ие THIS BLOCK OF ROM АТ FPFF6-FFFFA IS INITIALIZED FOR THE 8089
DEVICE AND POINTS ТО A BLOCK OF RAM AT LOCATION 100Н, %/
DECLARE
BLOCK$8089
BLOCK$8089$PTR
WORD
"009СН",
BYTE АТ (OFFFFOH)
WORD АТ (OFFFF1H)
WORD AT (OFFFF3H)
WORD DATA (ОЕЗ9ОН, ЗТАЯТЗАООН- 4);
ОАТА (ОБАН),
DATA ( ЗТАНТЗАООН),
DATA (ОҒҒООН);
79 STARTING ADDRESS ?/
е /
АТ (OFFFF6H) DATA (000018),
POINTER АТ (ОРРЕРЗН) DATA (00100H):
/9 SEGMENT ADDRESS
/% LONG JUMP OPCODE 9?/
8 /
PAGE
TO THE STARTING ADDRESS AND IS LOCATED
(NO OTHER DATA OR CONSTANT DECLARATIONS
ACTUALLY ТО (START=-ADDR)-4 SINCE THE
INSTRUCTION IS A RELATIVE JUMP OF LENGTH 3,
/9 NOP,JMP START-ADDR ?/
4
«ў
PL/M-86 COMPILER SDK86 KEYPAD MONITOR PAGE
/# оно оао ао и воина ааа аа вана наа ана аа ааа вана
ооо ооо ооо ESE RE RES ERE EER ER ESE SERRE RES ER ERR ER EE ES SE е
COMMON PROCEDURES
THIS MODULE CONTAINS THOSE LOWER LEVEL PROCEDURES CALLED BY HIGHER
LEVEL ROUTINES.
MODULE ORGANIZATION
THIS MODULE CONTAINS THE FOLLOWING SECTIONS:
1, BASIC 1/0 SECTION
KB$DISPLAY DISPLAY TO LED FIELDS
KB$BLANK$DATA$FIELD BLANK DATA FIELD WITH PROMPTS
KB$BLANK$ADDR$FIELD BLANK ADDRESS FIELD WITH PROMPTS
КВ%00Т%5ВҮТЕ OUTPUT A BYTE ТО DISPLAY
KBSOUT$WORD OUTPUT A WORD TO DISPLAY
KB$GET$CHAR INPUT A CHAR FROM KEYPAD
2. ARGUMENT EXPRESSION EVALUATOR
KB$GET$EXPR GET WORD EXPRESSION
KB$GET$ADDR GET ADDRESS EXPRESSION
КВЗОРОАТЕ$ ТР СЕТ OPTIONAL CS:IP
З, INTERRRUPT AND RESTORE/EXECUTE ROUTINES
SAVE$REGISTERS SAVES USERS REGISTERS
RESTORE$EXECUTE RESTORE MACHINE STATE AND EXEC
INTERRUPRI$ENTRY INTERRUPT FOR SINGLE STEP
INITERRUPT3$ENTRY INTERRUPT ROUTINE FOR GO
INIT$INT$VECTOR INITIALIZES INTERRRUPT VECTORS
./
А555152542Л44444444444.)
8 BASIC I/O SECTION Ы
ароросвввевовововововово /
14 1 KB$DISPLAY:
; STATEMENT # 14
/% THIS ROUTINE DISPLAYS THE CONTENTS OF THE ARRAY POINTED TO BY
THE FIRST PARM TO THE FIELD SPECIFIED BY THE SECOND (ADDR OR
DATA). THE NUMBER OF DECIMAL POINTS OR PROMPTS IS DETERMINED
BY THE THIRD PARAMETER #/
KBDISPLAY PROC NEAR
0251 55 PUSH BP
0252 8BEC MOV BP,SP
PROCEDURE (PTR,FIELD,PROMPTS);
15 2 DECLARE PTR POINTER, (FIELD,PROMPTS,T) BYTE,
DISPLAY BASED PTR (1) BYTE;
16 2 ТЕ FIELD=ADDR$FIELD ТНЕМ
; STATEMENT # 16
0254 807Е0601 СМР [BP].FIELD,1H
0258 7507 JNZ 81
17 2 OUTPUT(KB$STAT$PORT) = 94H; /% ADDRESS FIELD #/
; STATEMENT # 17
025А BAEAFF MOV ОХ, ОЕЕЕАН
PL/M-86 COMPILER SDK86 KEYPAD MONITOR PAGE
29
21
23
28
25
26
0250 8091 МОУ AL,95H
025Р 2805 JMP 8103
01:
ELSE
ОЧТРОТ (КВЗЗТАТЗРОЯТ) = 90H; /9 DATA FIELD #/
; STATEMENT 8 18
0261 BAEAFF MOV DX,OFFEAH
0264 8090 MOV AL,90H
2103:
0266 EE OUT DX
DO 1:0 TO 3;
; STATEMENT # 19
0267 алсдаа MOV І,ОН
982:
026С 803Е5Ғ0003 СМР Жа ЗИ
0271 17730 ЈА 983
T = DISPLAY(3-I); /9 DISPLAY BACKWARDS! #/
; STATEMENT # 20
0273 8003 MOV AL, ЗН
0275 24065РОО SUB AL, I
0279 8400 мо“ АН, ОН
0278 8966 MOV ЗТ, АХ
0270 C45E08 LES ВХ,ГВР].РТЯ
0280 268408 MOV СЬ,ЕЗ: (ВХ ] DISPLAY{ 31)
0283 8806200 МОУ T,CL
IF PROMPTS>I THEN T з T OR 80H;
; STATEMENT Ф 21
0287 8А4604 MOV Ам, ВР] .РАОМРТЗ
028A 3А065РОО СМР AL, I
028Е 7605 ЈВЕ 83 |
; ЗТАТЕМЕНТ # 22
0290 800Е620080 OR T, 89H
23:
OUTPUT(KBSDATAS$PORT) = T;
; ЗТАТЕМЕНТ # 23
0295 ЗАЕВРР MOV ОХ, ОРРЕЗН
0298 А06200 МОУ AL,T
0298 EE OUT DX
END;
; STATEMENT # 24
0296 80065F0001 ADD 1,18
02А1 7569 JNZ 882
883:
END;
; STATEMENT Ф 25
02А3 5D POP BP
0244 С20800 RET 8H
KBDISPLAY ENDP
KBSBLANKS$DATASFIELD:
; STATEMENT # 26
/8 THIS ROUTINE BLANKS THE DATA FIELD OF THE DISPLAY WITH THE
NUMBER OF PROMPTS (DECIMAL POINTS) AS SPECIFIED BY THE PARAMETER. "/
KBBLANKDATAFIELD PROC NEAR
02А7 55 PUSH BP
0248 8ВЕС MOV BP,SP
PROCEDURE( PROMPTS) ;
6
PL/M-86 COMPILER
27 2 DECLARE PROMPTS BYTE;
28 2 CALL KB$DISPLAY( @£BS$BLANKS, DATA$FIELD, PROMPTS);
; STATEMENT # 28
О2АА 2Е8р063700 LEA AX,CS:KBBLANKS
О2АЕ ОЕ PUSH С5 ‚4
0280 59 PUSH AX : 2
0281 8000 MOV AL,OH
02B3 50 PUSH AX : 3
0284 FF7604 PUSH СВР | ,РКОМРТ5: 4
0287 E897FF CALL KBDISPLAY
29 2 END;
; STATEMENT # 29
O2BA 5D POP BP
0288 С20200 КЕТ 2H
KBBLANKDATAFIELD ENDP
30 KB$BLANK$ADDR$FIELD:
; STATEMENT # 30 |
/® THIS PROCEDURE BLANKS THE ADDRESS FIELD: OF THE DISPALY WITH THE
NUMBER OF PROMPTS SPECIFIED BY THE PARAMETER 'РАОМРТ5'. 8/
KBBLANKADDRFIELD PROC NEAR
028Е 55 PUSH BP
O2BF ЗВЕС MOV BP,SP
| PROCEDURE(PROMPTS);
31 ë DECLARE PROMPTS ВУТЕ;
32 2 CALL KB$DISPLAY( @KB$BLANKS, ADDR$FIELD, PROMPTS);
; STATEMENT # 32
02C1 2£8D063700 LEA AX,CS:KBBLANKS
02С6 ОЕ PUSH cs : 4
9267 50 PUSH AX ; 2
02C8 8001 MOV AL,1H
02СА 50 PUSH AX : 3
02СВ FF7604 PUSH (BP].PROMPTS; Ч
02СЕ ЕВВОЕЕ CALL KBDISPLAY
33 2 END;
; STATEMENT # 33
02D1 5D POP BP
0202 с20200 RET 2H
KBBLANKADDRFIELD ENDP
34 1 KBSOUT$BYTE:
; STATEMENT # 34
/* THIS ROUTINE OUTPUTS THE BYTE INPUT FROM THE FIRST PARAMETER
TO THE DATA FIELD WITH THE NUMBER OF PROMPTS SPECIFIED BY THE
SECOND PARAMETER, #/
KBOUTBYTE PROC NEAR
0205 55 PUSH BP
0206 8BEC MOV BP,SP
PROCEDURE(B,PROMPTS);
35 2 DECLARE (B,PROMPTS) BYTE;
36 2 DISP(0),DISP(1) = 0; /* FIRST TWO BLANK #/
; STATEMENT # 36
02D8 8000 MOV AL,OH
O2DA A25B00 MOV DISP,AL
0200 A25C00 MOV DISP+1H,AL
37 2 DISP(2) = LED(SHR(B,4) AND OFH);
SDK86 KEYPAD MONITOR
; STATEMENT # 37
PAGE
7
PL/M-86 COMPILER
SDK86 KEYPAD MONITOR
02Е0 8А5ЕО06 MOV BL,.BP].B
02Е3 B104 MOV CL,4H
02Е5 D2EB SHR BL,CL
02Е7 80E30F AND BL,OFH
02ЕА 8700 MOV BH,OH
02ЕС 2ES8A4F3B MOV 012,05: 0 ВХ]
02РО 88085000 MOV DISP+2H,CL
38 2 DISP(3) = LED(B AND ОРН);
; STATEMENT # 38
О2Рц 8AS5E06 MOV BL,: ВР). В
0277 80ЕЗОР AND BL,OFH
О2РА 8700 MOV BH,OH
O2FC 2E8A4F3B MOV CL,CS:LED[ ВХ)
0300 880Е5Е00 MOV DISP+3H,CL
39 2 CALL KB$DISPLAY( @DISP, DATA$FIELD, PROMPTS);
; STATEMENT # 39
0304 800Е5В00 LEA CX,DISP
0308 1Е PUSH 03 ; 1
0309 51 PUSH СХ Ж.
030А 50 РОЗН АХ : 3
0308 FF7604 РОЗН IBP].PROMPT3; 4
ОЗОЕ ЕВЦОРЕ CALL KBDISPLAY
40 2 END;
; STATEMENT # 40
0311 5D POP BP
0312 С20400 RET UH
KBOUTBYTE ENDP
44 1 KBSOUT$WORD:
; STATEMENT # 41
/® THIS ROUTINE OUTPUTS THE FIRST PARM TO THE FIELD SPECIFIED
BY THE SECOND WITH THE NUMBER OF PROMPTS SPECIFIED BY THE THIRD.
LEADING ZERO BLANKING IS PERFORMED IF SPECIFIED BY THE FOURTH
PARAMETER, %/
KBOUTWORD PROC NEAR
0315 55 PUSH BP
0316 ЗВЕС MOV BP,SP
PROCEDURE(W,FIELD, PROMPTS, BLANKING);
42 2 DECLARE W WORD, (FIELD,PROMPTS,BLANKING) BYTE;
43 2 DO 1:0 TO 3;
; STATEMENT # 43
0318 С6065Ғ0000 MOV 1,0Н
884:
0310 803E5F0003 СМР 1,3Н
0322 7729 ЈА 285
цц 3 DISP(I) = LED(SHR(W,(3-1)*4) AND OOOFH);
; STATEMENT # 44
0324 B003 MOV AL, ЗН
0326 2A065F00 SUB AL,I
0324 8104 MOV CL,4H
032C F6E1 MUL СЕ
0328 8961 MOV Cx, АХ
0330 8BSEOA MOV ВХ, BP]. W
0333 ОЗЕВ SHR BX,CL
0335 81E30F00 AND ВХ, ОЕН
0339 2Е8А4738 MOV AL,CS: LEDS BX]
0330 ВА1Е5200 MOV BL,I
PAGE
8
PL/M-86 COMPILER
0341
0343
45 3
0346
0348
46 2
0340
0351
47
48
“ Г
0353
49 3
0358
0356
035Е
0362
0364
0366
0367
0363
0368
0360
036Ғ
0370
0371
0373
0375
50 4
0377
0378
0370
0381
52 ц
0386
23 3
54 2
0388
038C
038D
ОЗВЕ
0391
0394
55 2
0397
SDK86 KEYPAD MONITOR
ВН, ОН
DISP, ВХ), АГ,
; STATEMENT
1,18
084
; ЗТАТЕМЕНТ
[BP].BLANKING,1H
94
; STATEMENT
Т, ОН
ЗЕН AND І<3;
; ЗТАТЕМЕМТ
BL, I
ВН,ОН
ОТЗР[ ВХ], ЗЕН
АС, ОРРН
$+3H
AX
; STATEMENT
BL, T
ВН, ОН
ОТ5Р ВХ] ‚ОН
; STATEMENT
; ЭТАТЕМЕМТ
CALL KB$DISPLAY(@DISP,FIELD, PROMPTS);
; STATEMENT
AX,DISP
DS : 1,
АХ к
2
[ВР] РТЕБО; 3
| ВР]. РНОМРТ5; 4
KBDISPLAY
; STATEMENT
BP
B700 MOV
884758 MOV
END;
80065F0001 ADD
75D0 JNZ
885:
ТЕ BLANKING=BLANK THEN
807E0401 CMP
7939 542
ро;
L я 0;
С6065Ғ0000 MOV
DO WHILE РІЗР(І) =
086:
ВА 1ЕБЕОО МОУ
8700 MOV
807Е5ВЗЕ СМР
BOFF MOV
7401 JZ
40 INC
50 PUSd
80FB03 CMP
BOFF MOV
7201 JB
40 INC
59 POP
2201 AND
0008 АСА
7311 JNB
DISP(I) з 0;
8A1E5F00 MOV
B700 MOV
C6475B00 MOV
I з + 1;
80065ЕОООТ ADD
END;
EBDO JMP
END;
0%:
8D065B00 LEA
1E PUSH
50 PUSH
ЕЕ7608 РЈ5Н
FF7606 PUSH
ЕЗВАЕЕ CALL
END;
50 РОР
РАСЕ
# 45
/а BLANK LEADING O'S %/
# 46
PL/M-86 COMPILER
56
87
59
50
61
62
~
0398
0398
9396
09398
ОЗА 1
ОЗА2
03А%
0346
ОЗА9
ОЗАВ
ОЗАС
ОЗАР
9380
0383
0384
SDK85 KEYPAD MONITOR PAGE
С20800 АЕТ 8H
KBOUTWORD ENDP
КВЗСЕТЗСНААЯ:
| ; STATEMENT # 56
/® READS ONE CHARACTER FROM THE FIFO OF THE 8279. WAITS UNTIL
CHARACTER IS AVAILABLE AND THEN RETURNS THE CHARACTER IN GLOBAL
VARIABLE "СНАА", 9/
КВСЕТСЧАЯ PROC NEAR
55 РОЗН ВР
8BEC MOV BP,SP
PROCEDURE;
DO WHILE (INPUT(KB$STATSPORT) AND KBSINRDY)=20; END;
; STATEMENT 9 57
888:
BAEAFF MOV ОХ, ОЕРЕАН
EC IN DX
4807 TEST AL, ТН
74 а 42 888
001Р07(К335ТАТ3РОХНТ) = 0408; / 9 ENABLE INPUT DATA ?/
: STATEMENT # 59
BAEAFF MOV DX,OFFEAH
8040 MOV AL, ВОН
ЕЕ OUT DX
CHAR з ТМРОТ(КВЗОАТАЗРОВТ); /9 READ CHARACTER #/
; STATEMENT # 60
ВАЕЗЕР MOV ОХ, ОРРЕЗН
ЕС ІМ DX
A25A00 МОУ CHAR,AL
END;
: STATEMENT # 51
50 РОР ВР
C3 RET
KBGETCHAR ENDP
99 ее ео я ооо оо ава во ваа а даваа аа ааа ааа аа ааа ..
, ARGUMENT EXPRESSION EVALUATOR SECTION •
да 0998234899929994292999999898999999928909999998006/
KBSGETSEXPR:
: STATEMENT # 52
/® THIS ROUTINE GATHERS CHARACTERS FROM THE INPUT STREAM
AND FORMS A WORD EXPRESSION WHICH 15 RETURNED AS THE VALUE
OF THE PROCEDURE. THE CHARACTERS INPUT ARE ECHOED TO THE
ADDRESS OR DATA FIELD AS SPECIFIED BY THE FIRST PARAMETER.
IF THE FIRST PARM IS 0 (ADDR) OR 1 (DATA) THEN THE EXPRESSION ІЗ
OUTPUT AS А WORD AND IF -1 (DATA$8YTE) THEN АЗ A BYTE ALWAYS IN
DATA FIELD. THE NUMBER OF PROMPTS ВУ THE SECOND PARM, AND LEADING
ZERO BLANKING ВУ THE THIRD. EXPRESSION ARE TERMINATED WITH
A COMMA,PERIOD OR COLON. 'CHAR' WILL CONTAIN ONE OF THESE
ON EXIT. #/
KBGETEXPR PROC NEAR
55 РЈ5Н ВР
8BEC MOV ВР, 5?
PROCEDURE (FIELD,PROMPTS,SLANKING) WORD;
DECLARE (FIELD,PROMPTS,3LANKING) BYTE,
10
PL/M-86 COMPILER
64 2
0388
65 2
03BD
66 2
67 3
03C3
03С8
68
69
ық»
03СА
03СҒ
0300
0301
0304
0307
70 4
O3DA
71 4
03DD
03E2
O3E4
73: 24
0327
ОЗЕВ
ОЗЕР
ОЗЕР
03Е2
74 4
0325
03F9
1.5 4
03FB
ОЗРЕ
ОЗЕР
0402
0405
76 4
0407
0408
O40E
0411
SDK86 KEYPAD MONITOR
(SAVE,W) WORD, OPER BYTE;
OPER = KBPLUS;
STATEMENT # 64
ғ ;
С606630013 MOV OPER, 13H
W = 0;
; STATEMENT # 55
C7064C000000 MOV и, ОН
DO WHILE TRUE;
STATEMENT # 66
@90:
ТЕ CHAR=KBREGKEY THEN
; STATEMENT # 67
803E5A0015 CMP CHAR, 15H
7560 JNZ 85
ро; /% REGISTER NAME #/
CALL KB$DISPLAY( @KB$REG$PMT,FIELD,PROMPTS);
; STATEMENT # 69
2Е80062700 LEA AX,CS:KBREGPMT
ОЕ PUSH CS 2-3
50 PUSH AX а
ЕЕ7608 PUSH [BP].FIELD; 3
FF7606 PUSH [BP].PROMPTS; 4
E877FE CALL KBDISPLAY
CALL KB$GET$CHAR;
; STATEMENT # 70
ЕЗВЕРЕ CALL KBGETCHAR
IF CHAR>ODH THEN GOTO ERROR;
; STATEMENT # 71
803E5A000D CMP CHAR,ODH
7603 JBE $+5H
E9D5FD JMP ERROR
SAVE = REG$SAV(CHAR);
; STATEMENT # 73
8A1E5A00 MOV BL,CHAR
B700 MOV ВН,ОН
D1E3 SHL ВХ, 1
88472Е MOV AX, REGSAV[ BX]
A34A00 MOV SAVE, АХ
IF FIELD=DATA$BYTE THEN
; STATEMENT # 74
ВОТЕОВЕЕ СМР [BP].FIELD,OFFH
750С JNZ ет
CALL KB$OUT$BYTE(LOW(SAVE),PROMPTS);
; STATEMENT # 75
A14A00 MOV AX,SAVE
50 PUSH AX 421
РЕТ606 PUSH [ ВР] ,РВОМРТ5, 2
E8DOFE CALL KBOUTBYTE
EB10 JMP е8
ет:
ELSE
CALL KB$OUT$WORD(SAVE,FIELD,PROMPTS, BLANKING);
: STATEMENT # 76
FF364A00 PUSH SAVE : 4
FF7608 PUSH [ ВР] FIELD; 2
FF7606 PUSH [ ВР] .РВОМРТЗ; 3
ЕЕ7604 PUSH ІВРІ.В,АМКІМС; 4
/% INVALID REG KEY #/
PAGE
11
PL/M-86 COMPILER
0414
ТТ 4
0817
78 ц
041A
O41F
0421
0424
0428
79
80
=>
O42A
082Е
0831
82 4
0434
83 ц
ОЧЗА
O43F
84 5
0441
0444
0446
0448
O44C
ОЦЦЕ
0450
85 5
0453
0457
86 9
0459
ОЦБС
0450
0460
0463
87 5
0465
0469
O46C
O46F
TOR
KBOUTWORD
ТЭСНАВ;
КВСЕТСНАВ
OPER, 13H
813
AX,SAVE
W,AX
014
Н ТИЕН СОТО ERROR;
CHAR,OFH
$+5H
ERROR
ЗАТЕ, ОН
HAR<=0FH;
CHAR, ОРН
06
.
?
STATEMENT # 77
STATEMENT # 78
/% NUMBER #/
/9 INVALID DIGIT #/
ЗТАТЕМЕКТ # 80
ЗТАТЕМЕНТ # 82
STATEMENT # 83
SHL(SAVE,4) + DOUBLE( СНАЯ);
AX,SAVE
CL,4H
АХ, СТ,
CL,CHAR
СН, ОН
АХ, СХ
ЗАУЕ, АХ
STATEMENT # 84
ТЕ FIELD=DATA$BYTE THEN
CALL KBSOUTSBYTE(LOW( SAVE) ,PROMPTS);
SDK86 KEYPAD MONI
ЕЗРЕРЕ CALL
88:
CALL KB$GE
ЕВ881РР CALL
END;
86:
803Е630013 СМР
1559 JNZ
A14A00 MOV
01064C00 ADD
EBS7 JMP
85:
ELSE
DO;
ІР CHAR>OF
803E5A000F CMP
7603 JBE
E988FD JMP
SAVE = 0;
C7064A000000 MOV
DO WHILE C
992:
803Е5А000Ғ СМР
7709 ЈА
ЗАМЕ =
A14A00 MOV
B104 MOV
D3E0 SHL
ВАОЕБАОО MOV
B500 MOV
03С1 ADD
АЗЦАОО MOV
ВОТЕОВРЕ СМР
750C JNZ
A14A00 MOV
50 PUSH
FF7606 PUSH
Е8Т2ҒЕ CALL
ЕВ10 4МР
911:
ELSE
CALL
FF3Z64A00 PUSH
FF7608 PUSH
FF7606 PUSH
FF7504 PUSH
STATEMENT # 85
[BP].FIELD,OFFH
811
AX,SAVE
АХ
812
KB$OUT$WORD(SAVE,FIELD,PROMPTS,BLANKTING);
SAVE
.
,
.
,
STATEMENT # 86
1
{Г ВР] .РВОМРТЗ; 2
KBOUTBYTE
STATEMENT # 87
1
[BP].FIELD; 2
[BP].PROMPTS; 3
I ВР] .ВЕАМКТМС; 4
РАСЕ
PL/M-86 COMPILER
262
263
264
265
267
268
269
270
271
272
273
274
215
275
277
278
280
281
282
284
285
286
287
288
289
290
291
293
294
295
296
298
300
301
302
303
305
306
308
310
311
312
313
314
- Әс £ ЕБЕ ГА АА ХА 2) цд) АА а) Г № Г ГО № ГО
мере еее
NNN мо № м
—^
SDK86 KEYPAD MONITOR
REGISTER KEY AND DISPLAYS THE VALUE OF THAT RECTSTER WHICH IS
OPTIONALLY OPENED FOR INPUT. COMMA INCREMENTS TO NEXT REGISTER
UNLESS ІТ IS "ЕП," WHICH TERMINATESS AS DOES PERIOD. %/
PROCEDURE;
DECLARE I BYTE, SAVE WORD;
CALL KB$BLANK$ADDRS$FIELD(1);
CALL KB$GETS$CHAR;
IF CHAR>ODH THEN GOTO ERROR;
I = CHAR;
DO WHILE TRUE;
DISP(0),DISP(1) = O;
DISP(2) = КВ9ВЕС(1%2);
DISP(3) = KB$REG(I82+1);
CALL KB$DISPLAY(ODISP,ADDR$FIELD,O);
CALL KB$OUT$WORD(REG$SAV(I),DATA$FIELD,1,NOBLANK); /% VALUE #/
CALL KB$GET$CHAR;
ТЕ CHAR<>KBCOM AND CHAR<>KBPER THEN
DO;
SAVE = KB$GET$EXPR(DATA$FIELD,1,NOBLANK); /% UPDATE #/
IF CHAR<>KBCOM AND СНАК<>КВРЕН THEN GOTO ERROR;
REG$SAV(I) = SAVE;
/% INVALID REG KEY */
/8 DISPLAY REG NAME #/
END;
ТЕ СНАН-КВРЕН OR 1213 THEN RETURN; /а DONE? %/
I = I + 1;
ЕМО;
END;
KB$MOVE:
/% IMPLEMENTS THE MOVE COMMAND. PROMPTS FOR 3 ARGUMENTS AND MOVES
THE BLOCK OF MEMORY SPECIFIED BY ARG1-ARG2 ТО ARG3, IF THERE 15
A DIFFERENCE WHEN READ BACK, THEN ERROR. #/ `
PROCEDURE;
CALL KB$BLANK$ADDR$FIELD(3); /* FIRST ARGUMENT %/
CALL KB$GET$CHAR;
CALL KB$GET$ADDR( @ARG1,CS, 3);
IF CHAR<>KBCOM THEN GOTO ERROR;
CALL KB$BLANK$ADDR$FIELD(2);
CALL KB$GET$CHAR;
END$OFF = KB$GET$EXPR( ADDR$FIELD,2, BLANK);
IF END$OFF<ARG1.0OFF THEN GOTO ERROR;
IF CHAR<>KBCOM THEN GOTO ERROR;
CALL KB$BLANK$ADDR$FIELD(1);
CALL KB$GET$CHAR;
CALL KB$GET$ADDR(@ARG3,ARG1.SEG,1);
ТЕ СВАВ«>КВРЕН THEN GOTO ERROR;
/% SECOND ARGUMENT %/
/% THIRD ARGUMENT #/
LOOP:
MEMORY$ARG3 = MEMORY$ARG1;
ТЕ MEMORY$ARG3<>MEMORY$ARG1 THEN GOTO ERROR;
IF ARG1.OFF = END$OFF THEN RETURN;
ARG1,OFF = АНС1,ОЁР + 1;
ARG3.OFF = ARG3.OFF + 1;
GOTO LOOP;
END;
КВЗТНРИТ:
/% PROMPTS FOR A PORT WORD IN THE ADDRESS FIELD. WHEN A COMMA
IS ENTERED THE BYTE OR WORD Т5 DISPLAYED IN THE DATA FIELD.
Р,/М-86 COMPILER 50К86 KEYPAD MONITOR PAGE 14
THIS MAY BE REPEATED FOR MULTIPLE READING OF THE PORT. PERIOD
TERMINATES THE COMMAND. %/
PROCEDURE;
315 2 DECLARE PORT WORD;
316 2 CALL KB$BLANK$ADDRS$FPIELD(1); /% PROMPT FOR PORT #/
317 2 CALL КВ%СЕТ9СНАН;
318 2 PORT = KB$GETSEXPR(ADDRSFIELD,1,BLANK); /% GET PORT NUMBER 9/
319 2 CALL KB$OUTSWORD(PORT,ADDR$FIELD,0O,BLANK); /% REMOVE PROMPT #/
320 2 LOOP:
IF CHAR<>KBCOM THEN СОТО ERROR;
322 2 IF WORD$MODE THEN
323 2 CALL KB$SOUTS$WORD( INWORD( PORT) ,DATA$FIELD,0,NOBLANK);
ELSE
324 2 CALL КВЗОПТЗВУТЕ( INPUT( PORT) ,0);
425 2 CALL КВЗОБТЗСНАА;
326 2 IF CHAR=KBPER THEN RETURN;
328 2 GOTO LOOP;
329 2 END;
330 1 КВЗОПТРИТ:
/8 PROMPTS FOR A PORT WORD IN THE ADDRESS FIELD AND A BYTE ОН
WORD DATUM IN THE DATA FIELD. THIS DATUM [5 OUTPUT A SINGLE TIME
TO THE SPECIFIED PORT. %/
PROCEDURE;
331 2 DECLARE (DATUM,PORT) WORD;
332 2 CALL KB$BLANK$SADDRS$FIELD(1); /9 PROMPT FOR PORT #/
333 2 CALL КВЗСЕТУСНАВ;
334 2 PORT = KB$GETSEXPR(ADDRS$FIELD,1,BLANK);
212 2 ТЕ CHAR<>KBCOM THEN GOTO ERROR;
337 2 CALL KB$OUT$WORD(PORT,ADDR$FIELD,O,BLANK); /% REMOVE PROMPT %/
338 2 CALL KB$BLANK$DATA$FIELD(1); /9 PROMPT FOR DATUM %/
339 2 CALL КВЗСЕТЗСНАЯ;
340 2 LOOP:
ТЕ WORDSMODE THEN
341 2 DATUM = KBS$GETSEXPR(DATASFIELD,1,NOBLANK); /% GET DATUM WORD #/
ELSE
342 2 DATUM = KBSGETSEXPR(DATASBYTE,1,NOBLANK); /% GET DATUM BYTE 9/
343 2 IF CHAR=KBCOL THEN GOTO ERROR;
345 2 IF WORD$MODE THEN
346 2 OUTWORD( PORT) = DATUM;
ELSE
347 2 OUTPUT( PORT) = LOW{ DATUM);
348 2 IF СНАН-КВСОМ THEN /% MULTIPLE OUTPUTS #/
349 2 DO;
350 3 CALL КВЗВСАНКЗОАТАФЕТЕ.0( 1);
351 3 CALL KB$GET$CHAR;
352 3 ТЕ СНАН<С>КВРЕЋ THEN GOTO LOOP;
354 3 END;
355 2 END;
(048488888089989988992992220899239924999999894
• COMMAND DISPATCH MAIN PROGRAM LOOP •
010000020000 0000 000002 0008 00000000 20000 01200120200
356 1 DISABLE;
22! 1 ОПТРОТ( КВЗЗТАТЗРОНТ) = КВЗТМТТЗМООЕ; /% INIT 8279 %/
PL/M-86 COMPILER SDK86 KEYPAD MONITOR PAGE
0502 ВВЕС MOV BP,SP
PROCEDURE( PTR, DEFAULT$BASE, PROMPTS);
106 2 DECLARE PTR POINTER, DEFAULT$BASE WORD, PROMPTS BYTE,
ARG BASED PTR STRUCTURE (OFF WORD, SEG WORD);
107 2 ARG.SEG = DEFAULT$BASE;
; STATEMENT # 107
0504 884606 MOV AX,i1BP).DEFAULTBASE
0507 C4S5E08 LES ВХ,ІВРІ.РТВ
0504 26894702 MOV ES: ААС! ВХ-2Н),АХ
108 2 ARG.OFF = KB$GET$EXPR( ADDR$FIELD, PROMPTS, BLANK);
: STATEMENT # 108
050Е 8001 MOV AL, 1H
0510 50 PUSH AX ; 1
0511 FF7604 PUSH | ВР] „РВОМРТЗ; 2
0514 50 РИЗН АХ : 3
0515 E89DFE CALL KBGETEXPR
0518 C45E08 LES ВХ, ВР].РТВ
0518 268907 MOV ЕЗ:АВСІВХІ,АХ
109 2 ТЕ CHAR=KBCOL ТНЕН /% SEGMENT SPEC'D 8/
; STATEMENT # 109
051E 803Е5А0014 CMP CHAR, 14H
0523 7527 JNZ его
110 2 ро;
111 3 CALL KB$GET$CHAR;
; STATEMENT # 111
0525 E873FE CALL KBGETCHAR
112 3 ARG.SEG = ARG.OFF;
; STATEMENT # 112
0528 C45E08 LES ВХ,ІВРІ,РТА
0528 268807 MOV AX, ES: ARG[ ВХ)
052Е 26894702 MOV ES: АВС! BX+2H] ‚АХ .
113 3 ARG.OFF = KB$GET$EXPR(ADDR$FIELD,PROMPTS, BLANK);
; STATEMENT # 113
0532 B001 MOV AL, 1H
0534 50 PUSH AX ; 1
0535 FF7601 PUSH IBP].PROMPTS; 2
0538 50 PUSH AX ;
0539 E879FE CALL КВСЕТЕХРА
053С СЦ5ЕО8 LES ВХ,ІВРІ,РТВ
0532 268907 МОУ ES:ARGIBX],AX
114 3 ТЕ CHAR=KBCOL THEN GOTO ERROR;
: STATEMENT # 114
0542 803E5A0014 CMP CHAR, 14H
0547 7503 JNZ $+5H
0549 E9TOFC JMP ERROR
; STATEMENT # 115
116 3 END;
@20:
117 2 END;
; STATEMENT # 117
054с 5р РОР ВР
0540 С20800 RET 8H
KBGETADDR ENDP
118 1 KBSUPDATE$IP:
; STATEMENT # 118
/% THIS ROUTINE IS CALLED BY SINGLE STEP AND GO TO OUTPUT THE CURRENT
PL/M-86 COMPILER
119
120
121
122
123
124
125
126
0550
0551
0553
0557
0559
0554
0558
055С
055Р
0562
0565
0568
0568
0567
0572
0574
0575
0578
0578
0580
0582
0584
0585
0586
0588
0580
0588
0590
0591
0593
0595
0597
0599
059А
0590
О59Е
SDK86 KEYPAD MONITOR
СЗ: ТР AND THE CURRENT INSTRUCTION BYTE.
OPTIONAL INPUT. #/
CALL KBSOUT$WORD(IP,ADDR$FIELD,1, BLANK);
; STATEMENT #
PROC NEAR
BP
BP,SP
REGSAV+18H; 1
AL, 1H
AX ; 2
АХ ; 3
AX Яг
KBOUTWORD
; STATEMENT
AX,REGSAV+18H
СЗІР,АХ
; STATEMENT
АХ, REGSAV+10H
CSIP+2H,AX
CALL КВ%900Т9ВҮТЕ( MEMORY$CSIP,0);
; STATEMENT
BX,MEMORYCSIPPTR
ES:MEMORYCSIPE ВХ)
AL,OH
AX ; 2
KBOUTBYTE
; STATEMENT
KBGETCHAR
IF CHAR<>KBCOM AND CHAR<D>KBPER THEN
; STATEMENT
CHAR, 11H
AL,OFFH
CALL KB$BLANK$ADDRS$FIELD(1);
; STATEMENT #
AL,1H
AX а 4
KBBLANKADDRFIELD
CALL KBSBLANK$DATA$FIELD(0);
KBUPDATEIP
55 PUSH
8 BEC MOV
PROCEDURE;
FF 364600 PUSH
8001 MOV
50 PUSH
50 PUSH
50 PUSH
E8B6FD CALL
СЗІР,ОРР = IP;
A1%600 MOV
A32600 MOV
CSIP.SEG = CS;
А13Е00 MOV
A32800 MOV
C41E2600 LES
26FF37 PUSH
8000 MOV
50 PUSH
E85DFD CALL
CALL KB$GET$CHAR;
Е820ҒЕ CALL
803Е5А0011 СМР
ВОЁР MOV
7501 JNZ
40 INC
50 PUSH
803Е5А0010 СМР
ВОРЕ MOV
7501 JNZ
40 INC
$9 POP
22C1 AND
0008 АСА
7316 JNB
DO;
B001 MOV
50 РОЗН
E821FD CALL
8000 MOV
50 PUSH
; STATEMENT #
АЫ, ОН
АХ 504
Ф
СЗ: ТР IS OPENED FOR
/% DISPLAY ТР ®/
119
120
121
122
/% CHANGE СЗ:ТР #/
126
127
РАСЕ
16
PL/M-86 COMPILER SDK86 KEYPAD MONITOR PAGE
128
O5A0 E8018FD CALL KBBLANKDATAFIELD
CALL KB$GET$ADDR(@CSIP,CS,1);
; STATEMENT # 128
0543 80062600 LEA AX,CSIP
05А7 1E PUSH DS . 1
0548 50 PUSH AX е
0549 FF363E00 PUSH REGSAV+10H; 3
O5AD 8001 MOV AL,1H
OSAF 50 PUSH AX ; 4
0580 ЕЗШЕЕҒ CALL KBGETADDR
END;
822:
END;
; STATEMENT # 130
0583 5D POP BP
0584 C3 RET
KBUPDATEIP ENDP
/ 00а она ооо оо оно нии нони 04880620:
8 INTERRUPT AND RESTORE/EXECUTE SECTION е
,96098280888488808408884409820400890400 0 008:608080688888/
SAVE$REGISTERS:
; STATEMENT # 131
ие THIS ROUTINE IS USED ТО SAVE THE STACKED USER'S REGISTERS IN THE
MONITOR'S SAVE AREA. 9/
SAVEREGISTERS PROC NEAR
0585 55 PUSH BP
0586 8BEC MOV BP,SP
PROCEDURE; |
ВР = MEMORY$USERSTACK;
; STATEMENT # 132
0588 C41E2A00 LES BX,MEMORYUSERSTACKPTR
05BC 268807 MOV AX,ES: MEMORYUSERSTACK_ ВХ)
05ВЕ A33800 MOV REGSAV+0AH,AX
USERSTACK.OFF = USERSTACK.OFF + Ц;
; STATEMENT # 133
05с2 83062A0004 ADD USERSTACK,4H
DO Т=0 TO 10; /% POP REGISTERS OFF OF STACK #/
; STATEMENT # 134
0507 C6065F0000 MOV Т, ОН
0994:
05CC ВОЗЕЗЕОООА СМР І,ОАН
0501 7724 ЈА 895
RSG$SAV(REG$ORD(I)) = MEMORY$USERSTACK;
; STATEMENT # 135
0503 8А1Е5ЕО00 МОУ BL, I
0507 8700 MOV ВН,ОН
0509 2Е8А5Е67 MOV BL,CS: REGORD[ BX]
0500 8700 MOV BH ,OH
050Р БЛЕЗ SHL BX, 1
ОБЕ! C4362A00 LES SIT,MEMORYUSERSTACKPTR |
0525 268B04 MOV АХ, ES:MEMORYUSERSTACK; 51)
05Е8 89472E MOV REGSAV: ВХ] ‚АХ
USERSTACK.OFF = USERSTACK.OFF + 2;
; STATEMENT # 136
17
PL/M-86 COMPILER
ОБЕВ 83062A0002 ADD USERSTACK,2H
137 3 END;
; STATEMENT # 137
05F0 8006520001 ADD 1,1Н
0525 7505 JNZ @94
895:
138 2 SS з USERSTACK.SEG;
; STATEMENT # 138
0527 A12C00 MOV АХ, USERSTACK+2H
ОБРА A34200 MOV REGSAV+14H,AX
139 2 ЗР з USERSTACK.OPF;
; ЗТАТЕМЕНТ # 139
ОБРО А12А00 MOV AX,USERSTACK
0600 A33600 MOV REGSAV+8H,AX
140 2 END;
; STATEMENT # 140
0603 5D POP BP
0604 СЗ RET
SAVEREGISTERS ENDP
144 1 RESTORESEXECUTE:
; STATEMENT # 141
/9 THIS PROCEDURE RESTORES THE STATE OF THE USER MACHINE AND
PASSES CONTROL BACK TO THE USER PROGRAM. IT CONTAINS A
MACHINE LANGUAGE SUBROUTINE TO PERFORM THE POPPING OF THE
USER REGISTERS AND TO EXECUTE AN 'ІВЕТ' TO TRANSFER CONTROL
TO THE USER'S PROGRAM. ?/
RESTOREEXECUTE PROC NEAR
0605 55 PUSH BP
0606 8BEC MOV BP,SP
PROCEDURE;
142 2 DECLARE НЕЗТОНЕЗЕХЕСОТЕЗСООЕ(?) BYTE DATA
(08ВН,ОЕСН, /9 MOV BP,SP 9 /
08BH,046H,002H, /® MOV AX,/BP/.PARM2 е/
08ВН,05ЕН,004Н, /% МОМ ВХ,/ВР/,РАВМІ ./
O8EH,ODOH, /9 MOV SS,AX 9 /
О8ВН,ОЕЗН, /9 MOV ЗР,ВХ 9 /
O5DH, 79 POP BP * /
OSFH, 79 РОР DL ./
05ЕН, 7% РОР 31 ./
058Н, /9 POP BX е/
ОБАН, 79 POP ОХ е /
O59H, 79 POP СХ 9/
058н, /9 РОР АХ 9 /
ОТЕН, /9 POP DS 9 /
007Н, /9 РОР ЕЗ 2 /
ОСЕН), ие IRET е /
RESTORESEXECUTE$CODE$PTR WORD DATA ( „АЕЗТОВЕЗЕХЕСЏТЕЗСООЕ);
143 2 USERSTACK.SEG = 55;
; STATEMENT # 143
0608 А14200 MOV АХ, REGSAV+14H
0608 A32C00 MOV USERSTACK+2H,AX
144 2 USERSTACK.OFF = SP;
; STATEMENT # 144
060Е A13600 MOV АХ, REGSAV+8H
0611 АЗ2А00 MOV USERSTACK,AX
SDK86 KEYPAD MONITOR
PAGE
18
PL/M-86 COMPILER
SDK86 KEYPAD MONITOR PAGE
145 2 DO 1-0 TO 10; /® PUSH USER'S REGISTERS ONTO HIS STACK %/
; STATEMENT # 145
0614 C6065F0000 MOV Т, ОН
896:
0619 ВОЗЕБЕОООА СМР Т, ОАН
061Е 7726 ЧА 897
146 3 USERSTACK.OFF = USERSTACK.OFF - 2;
‚ STATEMENT # 146
0620 832E2A0002 SUB USERSTACK,2H
187 3 MEMORY$USERSTACK = REG$SAV( REG$ORD(10-I));
: STATEMENT # 147
0625 B30A МОМ BL,OAH
0627 ФА 1E5F00 SUB BL, LI
062B 8700 MOV BH ,OH
0620 2E8A5F67 MOV BL,CS:REGORD[ BX]
0631 B700 MOV BH ,OH
0633 D1E3 SHL BX, 1
0635 88472Е MOV AX, REGSAV[ BX]
0638 С41Е23А00 LES ВХ, MEMORYUSERSTACKPTR
063C 268907 MOV ES:MEMORYUSERSTACK[ ВХ], АХ
148 3 END;
; STATEMENT # 118
063F 80065Е0001 ADD Ж.
0644 7503 JNZ @96
897:
149 2 USERSTACK.OFF = USERSTACK.OFF - 2;
: STATEMENT # 149
0646 832E2A0002 SUB USERSTACK, 2H
199 2 MEMORY$USERSTACK = ВР;
| ; STATEMENT # 150
0648 А13800: MOV АХ, REGSAV+0AH
O64E СЦТЕСАОО LES BX,MEMORYUSERSTACKPTR
0652 268907 MOV ES:MEMORYUSERSTACKI BX],AX
151 2 CALL RESTORES$EXECUTE$CODE$PTR(USERSTACK.OFF,USERSTACK.SEG);
; STATEMENT # 151
0655 FF362A00 PUSH USERSTACK; 1
0659 ЕЕЗ362С0 PUSH USERSTACK+2H; 2
0650 2EFF160400 CALL CS: RESTOREEXECUTECODEPTR
152 2 END;
; STATEMENT # 152
0662 5D POP BP
0663 C3 RET
RESTOREEXECUTE ENDP
153 1 INTERRUPTI$ENTRY:
; STATEMENT # 153
ие THIS PROCEDURE IS CALLED WHEN THE CPU IS INTERRUPTED BY EXECUTING
AN INSTRUCTION WITH THE TRAP BIT SET (SINGLE STEP). #/
0664 06 PUSH ES
0665 1E PUSH DS
0666 2E8E1E9A00 MOV 05, СЗ: @@DATA$F RAME
066B 50 PUSH AX
066C 51 PUSH CX
066D 52 PUSH DX
066Е 53 PUSH BX
ОббЕ 56 PUSH S I
0670 57 PUSH DI
19
Р,/М-86 COMPILER
154
156
157
158
159
161
хл) М
0671
0674
0675
0676
0677
0678
0679
0674
0678
0576
0670
0675
0680
0682
0685
0687
068А
0680
068F
2692
069%
0697
0690
06А2
0548
06А7
ОбАА
ОбАЕ
0681
0684
30К86 KEYPAD MONITOR PAGE
£80900 CALL INTERRUPTIENTRY
ЈЕ РОР DI
5Е РОР 51
58 РОР BX
5А РОР DX
59 POP CX
58 POP AX
ЈЕ РОР 05
07 РОР Е5
СР IRET
INTERRUPTIENTRY PROC NEAR
35 PUSH BP
ВВЕС MOV ВР,5Р
PROCEDURE INTERRUPT 1;
USERSTACK.OFF = STACKPTR;
89E0
A32A00 MOV
USERSTACK.SEG = STACKBASE;
AX,SP
/® SAVE USER STACK INFO ?/
STATEMENT # 154
USERSTACK,AX
STATEMENT # 155
8со0 MOV AX,SS
A32C00 MOV USERSTACK+2H, АХ
ЗТАСКРТЯ = MONITORSSTACKPTR;
; STATEMENT # 156
А11400 MOV AX,MONITORSTACKPTR
89C4 MOV ЗР,АХ
ЗТАСКВАЗЕ = MONITOR$STACKBASE;
; ЗТАТЕМЕНТ # 157
А11600 МОУ АХ, МОМІТОАЗТАСКВАЅЕ
ЗЕРО MOV SS,AX
CALL SAVE$REGISTERS;
; STATEMENT # 158
Е8ЛЕҒЕ
Ё з
CALL
FL AND (МОТ STEP$TRAP);
81264800FFFE AND
SAVEREGISTERS
/% CLEAR STEP FLAG ?/
STATEMENT # 159
REGSAV+1AH, OFEFFH
ТЕ LAST$COMMAND<>SS$COMMAND THEN
803Е610003 СМР
7403 JZ 823
CALL RESTORESEXECUTE;
STATEMENT # 160
LASTCOMMAND, 3H
/% CONTINUE ТЕ NOT 55 %/
STATEMENT # 161
ESSEFF CALL RESTOREEXECUTE
823:
CALL КВЗОРОАТЕЗТР;
; STATEMENT # 162
ЁВ8А6ЕЕ CALL KBUPDATEIP
IF CHAR=KBCOM THEN
: STATEMENT # 163
803E5A0011 CMP CHAR,11H
7515 JNZ 824
DO.:
ІР а СЗІР.ОЄР:
; STATEMENT # 165
A12600 MOV AX,CSIP
A34600 MOV REGSAV+18H,AX
CS з 031Р.5Е8:
20
PL/M-86 COMPILER SDK86 KEYPAD MONITOR PAGE
167
168
169
170
172
173
; STATEMENT # 166
0687 412800 MOV АХ, CSIP+2H
O6BA A33E00 MOV REGSAV+10H, AX
FL з FL OR STEP$TRAP; /% SET STEP FLAG %/
; STATEMENT # 167
0680 810E48000001 OR REGSAV+1AH, 100H
CALL RESTORE$EXECUTE;
; STATEMENT # 168
06C3 ES 3FFF CALL RESTOREEXECUTE
END;
@24;
ТР CHAR<>KBPER THEN GOTO ERROR;
; STATEMENT # 170
06C6 803Е5А0010 CMP CHAR, 10H
06СВ 7403 JZ $+5H
06СО ЕОЕСҒА JMP ERROR
GOTO AFTER$COMMAND;
; STATEMENT # 172
0600 E9D6FA JMP AF TERCOMMAND
END;
INTERRUPTIENTRY ENDP
INTERRUPT 3$ENTRY:
; STATEMENT # 174
/* THIS PROCEDURE IS CALLED WHEN THE CPU EXECUTES A "ТМТ 3" INSTRUCTION,
THE MONITOR INSERTS THIS (OCCH) FOR A BREAKPOINT. ALSO AN EXTERNAL
INTERRUPT OR A USER SOFTWARE INTERRUPT MAY CAUSE THIS PROCEDURE TO BE
CALLED. ®/
06D3 06 _ PUSH ES
0604 1Е . РОЗН 05
0605 2Е8Е1Е9АО MOV DS,CS: 9@DATA$FRAME
O6DA 50 PUSH AX
0608 51 PUSH сх
06рС 52 PUSH DX
0600 53 PUSH BX
060Е 56 PUSH 51
060Ғ 57 PUSH DI
ОбЕО £80900 CALL INTERRUPT3ENTRY
06Е3 SF POP DI
ОбЕЦ 5E POP SI
06Е5 5B POP BX
06Е6 SA POP DX
06Е7 59 POP CX
0668 58 POP AX
06Е9 ЛЕ POP DS
06ЕА 07 РОР ЕЗ
ОбЕВ CF ІВЕТ
INTERRUPT3ENTRY PROC NEAR
ОбЕС 55 PUSH BP
0680 8BEC MOV BP,SP
PROCEDURE INTERRUPT 3;
USERSTACK.OFF = STACKPTR; /% SAVE USER STACK INFO #/
; STATEMENT # 175
06ЕР 89Е0 мом АХ, ЗР
ОБЕ! A32A00 МОУ USERSTACK, AX
USERSTACK.SEG = STACKBASE;
; STATEMENT # 176
21
Р./М-86 COMPILER
177
178
179
180
181
182
183
184
185
186
06РЦ
06Р6
0629
06РС
ОбЕЕ
0701
0703
0706
0709
ОТОА
070C
ОТОР
0713
0714
0715
O71A
0710
9720
0723
SDK86 KEYPAD
8CDO
A32C00
STACKPTR =
A11400
89C4
STACKBASE =
A11600
8EDO
MONITOR
MOV AX,SS
MOV USERSTACK+2H, AX
MONITORS$STACKPTR;
; STATEMENT
MOV AX,MONITORSTACKPTR
MOV SP,AX
MONITOR$STACKBASE;
; STATEMENT
AX,MONITORSTACKBASE
55 АТ
МОУ
MOV
CALL SAVE$REGISTERS;
ЕВАРЕЕ
; ЗТАТЕМЕНТ
CALL SAVEREGISTERS
GOTO AFTERSINTERRUPT;
ESD6FA
END;
INTERRUPTZENTRY
INITS$INTSVECTOR:
/9 THIS ROUTINE INITIALIZES AN INTERRRUPT VECTOR AS FOLLOWS:
FROM THE ADDRESS OF CORRECTED BY THE APPROPRIATE
; STATEMENT
JMP AFTERINTERRUPT
ENDP
#
#
177
178
179
180
; STATEMENT # 182
"ТМТЗВООТТМЕ"
NUMBER OF BYTES FOR THE INTERRUPT PLM PROLOGUE.
CURRENT CS REGISTER IS DETERMINED BY A MACHINE LANGUAGE CODED
SUBROUTINE.
INITINTVECTOR
79
ЗВЕС
8/
PROC NEAR
PUSH BP
MOV BP,SP
PROCEDURE( ТМТЗУЕСТОЯЗ РТА, INT$ROUTINESOFFSET) ;
DECLARE INT$VECTOR$PTR POINTER,
VECTOR BASED INT$VECTOR$PTR STRUCTURE (OFF WORD,
CORRECTION LITERALLY
“лен? я
ТНТТЗТИНТЗУЕСТОНЗСООЕ( #) BYTE DATA
(0558,
/%
O8BH,OECH, /%
08СН,0С8Н, /%
ОСЧН, О5ЕН, ООЧН, /%
026Н,089Н,007Н, / 9
0508,
/%
0С2Н,004Н,000Н), /%
INITSINTSVECTOR$CODE$PTR WORD DATA (.INITSINTSVECTORSCODE) ;
PUS
MOV
MOV
LES
MOV
POP
RET
H BP
ВР,5Р
АХ,С5
РАСЕ 22
THE ОҒЕЗЕТ
THE ЗЕОМЕМТ FROM ТНЕ
INT$ROUTINESOFFSET WORD,
SEG WORD),
/% OFFSET FOR PROLOGUE 9/
8 /
е /
е /
ВХ, /ВР/.РАВМ1 4/
ES:W/BX/,AX 8 /
ВР
4
CALL INIT$INTSVECTORSCODES$PTR( @VECTOR.SEG) ;
; STATEMENT #
C4S5E06
268D4702
06
50
2ЕҒЕ160600
VECTOR.OFF =
884604
ВЗЕВ 19
С45Е06
268907
END;
LES
LEA AX, ES: УЕСТОВ! BX+2H]
PUSH ES ; 1
PUSH AX ; 2
CALL
INTSROUTINES$OFFSET -
ЗХ, ВР). ІМТУЕСТОЯРТА
; STATEMENT #
MOV
SUB
LES
MOV
AX,19H
ES: УЕСТОЯ[ ВХ] ‚АХ
ВХ,: ВР]. INTVECTORPTR
184
CS: INITINTVECTORCODEPTR
CORRECTION;
185
АХ, ВР). INTROUTINEOFFSET
е /
8 /
/% SEGMENT PORTION #/
/9 OFFSET PORTION ?/
PL/M-86 COMPILER SDK86 KEYPAD MONITOR PAGE 23
; STATEMENT # 186
0726 5D POP BP
0727 С20600 RET 6H
INITINTVECTOR ENDP
/9 ооо ово вана ооо ааа ааа ава наа ава аа ааа ава вана ааа
ваааавнавоаааааааааа ааа ХХ АДА АЛЛАХА зачета ааа а
COMMAND MODULE
2222222222221: 2
ABSTRACT
THIS MODULE CONTAINS ALL THE COMMANDS IMPLEMENTED AS INDIVIDUAL PROCEDURES
AND CALLED FROM THE OUTER BLOCK OF THE COMMAND DISPATCH LOOP,
MODULE ORGANIZATION
THIS MODULE CONTAINS THE FOLLOWING SECTIONS:
1. COMMANDS SECTION
KB$GO со
KB$SINGLE$STEP SINGLE STEP
KB$EXAM$MEM SUBSTITUTE MEMORY
KB$EXAM$REG EXAMINE REGISTER
KB$MOVE MOVE
КВЗТНРОТ ТМРЏТ PORT
КВУООТРОТ ОЏТРЏТ РОВТ
2. COMMAND DISPATCH (OUTER BLOCK, MAIN PROGRAM LOOP)
NEXT$COMMAND DISPATCH
ERROR ERROR ROUTINE
./
/501080880992800900023808808908800
. COMMANDS SECTION .
98808088848898082888480489080808/
187 1 KB$GO:
; STATEMENT # 187
/9 IMPLEMENTS THE "00" COMMAND, DISPLAYS ІР AND CURRENT INSTRUCTION
BYTE AND OPENS CS:IP FOR INPUT AND ONE OPTIONAL BREAKPOINT,
BEGINS EXECUTION WHEN А PERIOD IS DEPRESSED AND DISPLAYS 'Е' IN
THE ADDRESS FIELD, UPON ENCOUNTERING A BREAKPOINT, 'BR' IS
DISPLAYED IN THE DATA FIELD, 9/
KBGO PROC NEAR
072, 55 PUSH BP
0728 8BEC MOV BP,SP
PROCEDURE;
188 2 CALL KB$UPDATE$IP; /% OPTIONAL CHANGE CS:IP %/
; STATEMENT # 188
0720 Е820ОҒЕ . CALL KBUPDATEIP
189 2 IF CHAR=KBCOM THEN
; STATEMENT # 189
0730 803E5A0011 CMP CHAR,11H
0735 7548 JNZ @26
190 2 DO; /8 BREAKPOINT #/
191 3 CALL KB$BLANK$ADDR$FIELD(1);
PL/M-86 COMPILER
132
199
19 4
195
797
198
199
201
202
203
0737
9739
073A
0730
073F
0740
0743
0745
ОТЦА
0748
07%С
0759
0752
МГ? 32
0756
0758
0750
9760
0764
0767
076А
076Е
0772
0776
0778
0778
0780
0782
0787
0789
SDK36 KEYPAD MONITOR
; STATEMENT # 191
8001 MOV AL, 1H
50 PUSH AX 8: З
ЕВ881ЕВ CALL KBBLANKADDRF IELD
CALL KBSBLANK$DATA$FIELD(O);
; STATEMENT # 192
B000 MOV AL,OH
50 PUSH AX с 9
ES64FB CALL KBBLANKDATAFIELD
CALL KB$GET$CHAR;
; STATEMENT # 193
Е855ЕС CALL KBGETCHAR
CALL KB$GET$ADDR(@BRK1,CSIP.SEG,1);
; STATEMENT # 194
80062200 СЕА АХ, ВЕК!
ТЕ PUSH DS 1
50 PUSH AX ; 2
ЁЁ362800 РЈ5Н С5ІР»2Н ; 3
8001 MOV AL,1H
50 PUSH AX ; 4
ЕВАВЕО CALL KBGETADDR
IF CHAR<>KBPER THEN GOTO ERROR;
; STATEMENT # 195
803Е5А0010 СМР CHAR, 10H
7403 42 $+5H
E95CFA JMP ERROR
BRK1$SAVE = MEMORY$S8RK1;
; STATEMENT 8 197
(14182200 LES BX, MEMORYBRKIPTR
268A07 MOV АС , ЕЗ : МЕМОВУВАКТ- ВХ)
А25900 МОУ BRKISAVE,AL
MEMORY$BRK1 = BREAKSINST;
; STATEMENT # 198
26С507СС MOV ES:MEMORYBRK1_BX],0CCH
ТЕ MEMORY$BRK1<>BREAK$INST THEN GOTO ERROR;
; STATEMENT # 199
С41Е2200 LES BX,MEMORYBRKX1PTR
26803FCC CMP ES:MEMORYBRK1_BX],0CCH
7403 JZ $+5H
Е9Ш1ҒА ЈМР ERROR
BRKI$FLAG = TRUE;
; STATEMENT # 201
C5065800FF MOV BRKIFLAG,OFFH
END;
; STATEMENT # 202
EBOA JMP 829
826:
ELSE
IF CHAR<>KBPER THEN GOTO ERROR;
; STATEMENT # 203
803Е5А0010 СМР СНАН, 10H
7403 JZ $+5Н
Е930ҒА ЈМР ERROR
; STATEMENT # 294
829:
CALL KBSODISPLAY( @KBSEXEC ADDRS$SFIELD,O);
; STATEMENT # 205
PAGE
24
PL/M-86 COMPILER
SDK86 KEYPAD MONITOR PAGE
078C 2Е80062Ғ00 LEA AX,CS:KBEXEC
0791 ОЕ PUSH с5 ; 1
0792 50 РОЗН АХ ; 2
0793 8001 MOV AL, 1H
0795 50 PUSH AX ; 3
0796 8000 MOV AL,OH
0798 50 PUSH AX Эн!
0799 ЕЗВБРА CALL KBDISPLAY
206 CALL KB$BLANK$DATA$FIELD(0);
; STATEMENT # 206
079C 8000 MOV AL,OH
079Е 50 PUSH AX ; 1
079F E805FB CALL KBBLANKDATAFIELD
207 IP = CSIP.OFF;
| ; ЗТАТЕМЕНТ # 207
0742 412600 MOV AX,CSIP
0745 A34600 MOV REGSAV+18H, AX
208 CS = CSIP.SEG;
; STATEMENT # 208
07А8 A12800 MOV AX,CSIP+2H
ОТАВ АЗЗЕОО MOV REGSAV+10H, AX
209 FL = FL AND (МОТ STEP$TRAP);
; STATEMENT # 209
ОТАЕ 81264800FFFE AND REGSAV+1AH, OFEFFH
210 CALL ВЕЗТОНЕЗЕХЕСИТЕ;
; STATEMENT # 210
078% ЕВЦЕРЕ CALL RESTOREEXECUTE
211 END;
; STATEMENT # 211
0787 5D POP BP
07B8 C3 RET
KBGO ENDP
212 KB$SINGLE$STEP:
; STATEMENT # 212
/8 IMPLEMENTS THE SINGLE STEP COMMAND. DISPLAYS IP AND THE
CURRENT INSTRUCTION WORD. OPENS CS:IP FOR INPUT. DEPRESSING
COMMA CAUSES THE MONITOR TO SINGLE STEP THE INSTRUCTION,
AND PERIOD TERMINATES THE COMMAND. %/
KBSINGLESTEP PROC NEAR
0789 55 PUSH BP
ОТВА 8BEC MOV BP,SP
PROCEDURE;
213 2 CALL KB$UPDATE$IP; /9 OPTIONAL CHANGE OF CS:IP #/
; STATEMENT # 213
ОТВС E891FD CALL KBUPDATEIP
214 2 IF CHAR<>KBCOM THEN GOTO ERROR;
; STATEMENT # 214
ОТВЕ 803E5A0011 CMP CHAR,11H
0705 7403 22 $+5Н
ОТСб E9F3F9 ЈМР ERROR
IP = CSIP.OFF;
; STATEMENT # 216
ОТС9 А12600 MOV AX,CSIP
ОТСС A34600 MOV REGSAV+18H, АХ
217 2 CS = CSIP.SEG;
; STATEMENT # 217
25
Р,/М-86 COMPILER 50К86 KEYPAD MONITOR PAGE
221
222
223
226
228
229
го гә
ОТСЕ А12800 MOV АХ, CSIP+2H
9702 А33Е00 МОУ REGSAV+10H,AX
FL з FL OR ЗТЕРЗТНАР; /% SET TRAP FLAG ВІТ IN PSW ?/
; STATEMENT # 218
0705 810Е48000001 OR REGSAV+1AH,100H
CALL НЕЗТОНЕЗЕХЕСИТЕ;
; STATEMENT # 219
0708 E827FE CALL RESTOREEXECUTE
END;
; STATEMENT # 220
07DE 50 POP BP
ОТОЕ СЗ RET
KBSINGLESTEP ENDP
КВЗЕХАМЗМЕМ:
| ; STATEMENT # 221
/® IMPLEMENTS THE EXAMINE MEMORY COMMAND. PROMPTS FOR AN
ADDRESS AND THEN DISPLAYS THE BYTE OR WORD AT THAT LOCATION,
IT THEN [5 OPTIONALLY OPENED FOR INPUT. COMMA INCREMENTS TO
THE NEXT LOCATION. PERIOD TERMINATES. 9/
KBEXAMMEM PROC NEAR
ОТЕО 55 PUSH BP
07Е1 ВВЕС MOV ВР, ЗР
PROCEDURE;
DECLARE W WORD;
CALL KB$BLANKSADDRS$FIELD(1); /% PROMPT FOR ADDRESS #/
; STATEMENT # 223
07Е3 8001 MOV AL,1H
O7E5 50 PUSH AX ; 1
0726 E8DSFA CALL KBBLANKCADDRFIELD
CALL KBSGETS$CHAR;
; STATEMENT # 224
07Е9 ESAFFB CALL KBGETCHAR
CALL КВЗСЕТЗАРОН ( ФАНСТ,С5,1); /% GET ADDRESS %/
; STATEMENT # 225
07ЕС 30061А00 LEA AX, ARGI
ОТЕО 1E PUSH DS 1
07Е1 50 PUSH АХ ; -
ОТЕ2 ЕЕЗ6ЗЕ00 PUSH REGSAV+10H; 3
0725 8001 MOV AL,1H
0728 50 PUSH AX ; 4
0729 280520 CALL KBGETADDR
ТЕ CHAR<>KBCOM THEN QOTO ERROR;
; STATEMENT # 226
ОТЕС 803Е5А0011 СМР СНАК,118
0801 7403 Ја $+5H
0893 298629 ЈМР ERROR
DO WHILE TRUE;
: STATEMENT # 228
998:
CALL KBSOUT3SWORD(ARG1.OFF,ADDR$FIELD,0O, BLANK); /% CLEAR PROMPT ?/
; STATEMENT $ 229
9806 FF361A00 PUSH ARG1 62.7
080, 8001 MOV АС, 1Н
980С 50 PUSH AX зе
9890 8109 MOV Со, ОВ
ОВОЕ 51 PUSH СХ ‚3
26
PL/M-86 COMPILER
2 32
233
236
238
239
= >
0810
0811
0814
0817
0819
0818
081Ғ
0822
0824
08 25
0827
0828
0829
0826
082Е
0832
0835
0837
0838
0838
ОВЗЕ
0843
0845
0846
0847
O84C
ОВЦЕ
0851
0854
0856
0858
085A
085B
085D
085E
50К86 KEYPAD MONITOR PAGE
50 PUSH AX ; 4
E801FB CALL KBOUTWORD
IF WORD$MODE THEN
; STATEMENT # 230
A06000 MOV AL,WORDMODE
0008 RCR AL, 1
7313 JNB 833
CALL KB$OUT$WORD(MEMORY$WORD$ARGI1,DATA$FIELD,1,NOBLANK);
STATEMENT # 231
,
C41E1A00 LES BX,MEMORYARGIPTR
26FF37 PUSH ES:MEMORYWORDARG1: BX]
В000 МОМ АБ, ОН
50 PUSH AX ; 2
8101 MOV CL,1H
51 PUSH CX Е 3
50 PUSH AX ; 4
ЕЗЕЗЕА CALL KBOUTWORD
EBOD JMP 034
033:
ELSE
CALL КВЗОЏТЗВУТЕ( MEMORY$ARG1,1);
; STATEMENT # 232
C4¥1E1A00 LES BX,MEMORYARGIPTR
26FF37 PUSH ES:MEMORYARG1: BX]
8001 MOV AL,1H
50 PUSH AX 5 2
E89AFA CALL KBOUTBYTE
е3ц:
CALL KB$GET$CHAR;
; STATEMENT # 233
E85DFB CALL KBGETCHAR
IF CHAR=KBPER THEN RETURN;
; STATEMENT # 234
803E5A0010 CMP CHAR, 10H
1502 JNZ 835
; STATEMENT # 235
5D POP BP
C3 RET
035:
IF CHAR<>KBCOM THEN
; STATEMENT # 236
803E5A0011 CMP CHAR,11H
7503 JNZ $+5H
E99100 JMP @36
IF WORD$MODE THEN
; STATEMENT # 237
A06000 MOV AL,WORDMODE
0008 RCR AL,1
7343 JNB 037
DO;
W = KB$GET$EXPR(DATA$FIELD,1,NOBLANK);
; STATEMENT # 239
B000 MOV АС, ОН
50 PUSH AX 5 1
В101 МОУ CL,1H
51 PUSH CX за
50 PUSH АХ : 3
27
PL/M-36 COMPILER
280
245
246
247
248
4: м
085Р
0862
0865
O86A
086C
086Е
086Р
0879
0875
0877
0879
0874
0878
0870
ОВТЕ
0881
0884
0837
0888
ОВВЕ
0892
0895
0899
0898
0890
0895
ОВАО
ОВАТ
ОВАЗ
ОВАЦ
ОВА?
ОВАА
ОВАЕ
0881
0883
0384
9885
ОЗВА
08BC
0885
ОВВЕ
08С0
SDK86 KEYPAD MONITOR PAGE
ЕВБЗЕВ CALL KBGETEXPR
A34E00 MOV Я, АХ
ТЕ (CHAR<>KBCOM) AND (CHAR<>KBPER) THEN GOTO ERROR;
; STATEMENT # 240
803E5A0011 CMP CHAR,11H
BOFF MOV AL, OF FH
7591 JNZ $+3H
10 ІНС АХ
50 PUSH AX ; 1
803Е5А0010 СМР CHAR, 10H
BOFF MOV AL,OFFH
7501 JNZ $+3Н
40 ING АХ
59 РОР CX : 4
2261 AND 41 CL
0008 RCR AL, 1
7303 JNB $+5H
Е938Ғ9 ЈМР ERROR
MEMORYS$WORDSARG1 = W;
; STATEMENT # 242
А 1ЦЕОО MOV АХ, W
С81Е1А00 LES BX,MEMORYARGIPTR
268907 MOV ES:MEMORYWORDARG1; ВХ] ‚АХ
ТЕ MEMORY$WORD$ARG1<>W THEN GOTO ERROR;
; STATEMENT # 243
СЦ1ЕТАОО LES BX,MEMORYARGIPTR
268807 MOV АХ, ES: MEMORYWORDARG1° BX]
ЗВОбЦЕОО СМР АХ, И
Е842 ЈМР 29
END;
; STATEMENT # 245
937:
ELSE
DO;
Ч = KBSGET$SEXPR(DATASBYTE,1,NOBLANK);
; STATEMENT # 247
BOFF MOV AL,OFFH
50 PUSH AX ; 1
8001 MOV А,,1Н
50 PUSH AX : 2
8000 MOV АС, ОН
50 РОЗН АХ ; 3
ЕВОБЕВ CALL KBGETEXPR
A34E00 MOV W,AX
IF (CHAR<>KBCOM) AND ( СНАЙ< > КВРЕН) THEN GOTO ERROR;
; STATEMENT # 248
803Е5А0011 СМР СНАН,11Н
BOF F MOV АС, ОРЕН
7501 JNZ $+3Н
40 INC AX
50 PUSH АХ "1
803E5A0019 CMP CHAR, ТОН
BOFF MOV АС, ОРЕН
7501 JNZ ".3Ч
40 INC AX
59 POP cz а
2261 AND Au, GU
28
PL/M=86 COMPILER SDK86 KEYPAD MONITOR
08с2 0008 RCR АШ, 1
08С4 7303 JNB $+5H
08C6 E9F3F8 JMP ERROR
250 4 МЕМОНҮЗАЯС1 = LOW(W);
: STATEMENT # 250
08С9 А1%Е00 MOV АХ, М
ОВСС C41E1A00 LES 8X,MEMORYARGIPTR
0800 268807 MOV 5$: МЕМОЯТАНСТ ВХ], АС
251 4 ТЕ MEMORYSARG1<>LOW( м) THEN GOTO ERROR;
; STATEMENT # 251
0803 А14ЕОО МОУ АХ, м
0806 CH1E1AOO LES BX,MEMORYARGIPTR
08рА 263807 CMP ES:MEMORYARGIEBX],AL
89:
0820 7403 JZ $+5H
O8DF E9DAF8 JMP ERROR
: STATEMENT 252
253 4 END;
836:
254 3 ТЕ CHAR=KBPER ТНЕМ RETURN;
$ STATEMENT 254
08Е2 803E5A0010 СМР СНАН,10Н
ОВЕ? 17502 JNZ 843
; STATEMENT # 255
08Е9 50 POP BP
ОВБА СЗ RET
943:
256 3 ТЕ WORD$MODE THEN
; STATEMENT 256
08ЕВ А06000 MOV AL,WORDMODE
O8EE 0008 RCR AL,1
ОВЕО 7307 JNB ayy
257 3 ARG1.OFF з АЯСТ,ОРЕ + 2;
; STATEMENT 257
ОВЕ2 83061A0002 ADD ARG1,2H
08F7 2805 ЈМР 810
ецц:
ELSE
258 3 ARG1.OFF = ARG1.OFF + 1;
; STATEMENT 258
0829 83061A0001 ADD АВС1,1Н
259 3 END;
; STATEMENT 259
910:
O8FE Е905ҒҒ ЈМР 898
599:
260 2 END;
: STATEMENT 260
0901 5D POP BP
0902 СЗ RET
KBEXAMMEM ENDP
261 1 КВЗЕХАМЗКЕС:
/9 IMPLEMENTS THE EXAMINE REGISTER COMMAND.
STATEMENT # 261
PROMPTS FOR A VALID
REGISTER KEY AND DISPLAYS THE VALUE OF THAT REGISTER WHICH IS
OPTIONALLY OPENED FOR INPUT.
COMMA INCREMENTS TO NEXT REGISTER
PAGE
29
PL/M-86 COMPILER
0903
0904
262
263
мо го
0906
0908
0909
О90С
265 2.
090F
0914
0916
267 2
0919
09 1С
268 2
269 3
091F
0921
0924
270 3
0927
092A
092C
092Е
09 30
0934
0938
093C
0940
0944
0945
0946
0948
0949
0948
094C
273 3
094
0953
50К86 KEYPAD MONITOR
UNLESS ТТ IS "Ри" WHICH TERMINATESS AS DOES PERIOD. %/
KBEXAMREG PROC NEAR
55 PUSH BP
8BEC MOV BP,SP
PROCEDURE;
DECLARE I BYTE, SAVE WORD;
CALL KB$BLANKS$ADDR$FIELD(1);
; STATEMENT # 263
8001 MOV AL, 1H
50 PUSH AX ; 1
ЕЗВ2Е9 CALL KBBLANKADDRFIELD
CALL KB$GETS$CHAR;
; STATEMENT # 264
ЕВВСРА CALL KBGETCHAR
IF CHAR>ODH THEN GOTO ERROR; /а INVALID REG KEY Ф/
; STATEMENT # 265
803Е5А0000 СМР CHAR,ODH
7603 JBE $+5H
E9A3F8 JMP ERROR
I = CHAR;
; STATEMENT # 267
405400 MOV AL,CHAR
A26400 MOV 14:45
DO WHILE TRUE;
; STATEMENT # 268
8100:
DISP(0),DISP(1) = 0; /8 DISPLAY REG NAME %/
; STATEMENT # 269
8000 MOV AL, ОН
А25800 MOV DISP,AL
A25C00 MOV DISP+1H,AL
DISP(2) = KB$REG(I®2);
; STATEMENT # 270
A06400 MOV AL,I
B102 MOV CL,2H
F6E1 MUL CL
8963 MOV BX, АХ
2E8A4F4B MOV CL,CS:KBREG{ ВХ)
880E5D00 MOV DISP+2H,CL
DISP(3) з КВҘЋЕС(1%2+1);
; STATEMENT # 271
ФЕВАЦЕЦС MOV CL,CS:KBREG: ВХ+1Н]
880Е5Е00 MOV DISP+3H,CL
CALL KBS$DISPLAY(@DISP,ADDR$FIELD,0O);
; STATEMENT # 272
8D065B00 LEA AX,DISP
ЈЕ РОЗН 03 ; 1
50 PUSH AX хо 8
800! MOV AL, 1H
59 PUSH AX и: 3
B000 MOV AL,OH
59 PUSH AX ЭГ
E802F9 CALL KBDISPLAY
CALL KBSOUT$WORD( REG$SAV(I),DATASFIELD,1,NOBLANK); /% VALUE %/
; STATEMENT # 273
ЗА 1Е6400 мом 81,1
8700 MOV BH,OH
PAGE 30
РІ,/М-86 COMPILER
0955
0957
095A
0950C
095D
095F
0960
0961
0964
215 3
0967
0966
096E
0970
0971
0972
0977
0979
0978
097C
097D
097F
0981
276 3
277 4
0983
0985
0986
0988
0989
098A
098D
278 4
0990
0995
0997
0999
0994
099B
09A0
09А2
O9A4
09А5
09А6
0948
O9AA
O9AC
280 4
09АҒ
0983
0985
SDK86 KEYPAD MONITOR PAGE
D1E3 SHL BX, 1
ЕЕТ72Е РОЗН REGSAV[BX]; 1
8000 MOV AL,OH
50 PUSH AX ; 2
8101 МОУ CL,1H
51 PUSH сх ; 3
50 PUSH AX ЭГ
E8B1F9 CALL KBOUTWORD
CALL KB$GET$CHAR;
; STATEMENT # 274
ES34FA CALL KBGETCHAR
IF CHAR<>KBCOM AND CHAR<>KBPER THEN
; STATEMENT # 275
803E5A0011 CMP CHAR,11H
BOFF MOV AL,OFFH
7501 JNZ $+3H
40 INC AX
50 PUSH AX 553
803E5A0010 CMP CHAR, 10H
BOFF MOV AL,OFFH
7501 JNZ $+3H
40 INC AX
59 POP СХ з 4
2201 AND AL, CL
0008 АСА АС, 1
ТЗЗА JNB ецт
ро;
SAVE = KB$GET$EXPR(DATA$FIELD,1,NOBLANK); /% UPDATE ®/
; STATEMENT # 277
B000 MOV АЫ, ОН
50 PUSH AX 4
B101 MOV CL,1H
51 PUSH CX га
50 PUSH AX 5-3
Е828ҒА CALL KBGETEXPR
A35000 MOV SAVE,AX
IF CHAR<>KBCOM AND CHAR<>KBPER THEN GOTO ERROR;
; STATEMENT # 278
803E5A0011 CMP CHAR, 11H
BOFF MOV AL, OFFH
7501 JNZ $+3H
10 ІМС АХ
50 PUSH AX 1
803Е5А0010 СМР CHAR, 10H
BOFF MOV AL,OFFH
7501 JNZ $+3H
40 INC AX
59 POP CX . 1
2201 AND АС, CL
0008 RCR AL,1
7303 JNB $+5H
E90DF8 JMP ERROR
REG$SAV(I) = SAVE;
: ЗТАТЕМЕКТ # 280
8A1E6400 MOV BL, I
В700 МОУ ВН,ОН
О1ЕЗ SHL ВХ, 1
31
PL/M-86 COMPILER
281
282
285
286
287
288
289
290
4
3
SDK86 KEYPAD MONITOR
0987 А15000 MOV
098А 89472Е MOV
END;
847:
IF CHARsKBPER OR 1:13 THEN
AX,SAVE
;
СНАК,10Н
0980 803Е5А0010 СМР
09с2 BOFF мо“ AL,OFFH
09С 7401 JZ $+3Н
0966 40 INC AX
0967 50 PUSH АХ 2
09С8 803E64000D CMP Т, ООН
09СО BOFF MOV AL,OFFH
09СЕ 7401 JZ $+3H
0901 40 INC AX
0902 59 POP CX è
0903 0ҮС1 OR AL, CL
0905 0008 ВСА AL, 1
0907 7302 JNB 949
09029 50 РОР ВР
O9DA СЗ RET
849:
1-5 I +* 1;
,
09DB 8006640001 ADD I,1H
END;
0920 E93CFF JMP 8100
8101:
END;
,
0923 5D POP BP
О9ЕЧ СЗ ВЕТ
KBEXAMREG ENDP
KB$MOVE:
/9 IMPLEMENTS THE MOVE COMMAND.
A DIFFERENCE WHEN READ BACK,
KBMOVE PROC NEAR
09Е5 55 РИЗН ВР
09Е6 8BEC MOV ВР ,SP
PROCEDURE;
CALL KB$BLANK$ADDRSFIELD( 3);
REGSAV, ВХ], АХ
RETURN;
STATEMENT # 282
STATEMENT # 283
STATEMENT # 284
STATEMENT # 285
STATEMENT # 286
STATEMENT # 287
PAGE
/% DONE? %/
PROMPTS FOR 3 ARGUMENTS AND MOVES
THE BLOCK OF MEMORY SPECIFIED BY ARG1-ARG2 TO ARG}.
THEN ERROR. 9/
IF THERE ІЗ
/9 FIRST ARGUMENT #/
STATEMENT # 288
09Е8 8003 MOV AL, 3H
09ЕА 50 PUSH AX ‚1
09ЕВ Е800Е8 CALL KBBLANKADDRFTIELD
CALL КВЗСЕТЗСНАЯ;
; STATEMENT # 289
09ЕЕ ES8AAFY CALL KBGETCHAR
CALL KBSGETSADDR(@ARG1,CS, 3),
09Е1 8D061A00 LEA AX,ARG1
O9F5 1E PUSH DS ч
STATEMENT # 290
1
32
PL/M-86 COMPILER
09F6
09F7
О9РВ
09FD
09FE
0А01
0А06
0408
293 2
ОАОВ
0А00
ОАОЕ
294 2
0А11
295 2
OA14
0416
ОА17
0А19
ОАТА
ОА18
ОАТЕ
296 2
0А21
OA24
0428
OA2A
298 2
0А20
0А32
ОАЗЦ
300 2
ОАЗТ
0439
ОАЗА
301 2
ОАЗО
зог г
OA4O
ОАЦЦ
0445
0446
ОАЧА
OA4C
ОАЦО
303 2
SDK86 KEYPAD MONITOR
50 PUSH AX ; 2
FF363E00 PUSH REGSAV+10H; 3
8003 MOV AL, ЗН
50 PUSH AX ; 4
ЕВООЕВ CALL KBGETADDR
IF CHAR<>KBCOM THEN GOTO ERROR;
PAGE
; STATEMENT # 291
803Е5А0011 СМР CHAR,11H
7403 Ј2 $+5H
E9B1F7 JMP ERROR
CALL KB$BLANK$ADDR$FIELD(2);
/* SECOND ARGUMENT #/
; STATEMENT # 293
8002 MOV AL, 2H
50 PUSH AX ; 1
E8ADF8 CALL KBBLANKADDRFIELD
CALL KB$GET$CHAR;
; STATEMENT # 291
E887F9 CALL KBGETCHAR
END$OFF = KB$GET$EXPR(ADDR$FIELD,2, BLANK);
; STATEMENT # 295
8001 MOV AL, 1H
50 PUSH AX ; 1
B102 MOV CL,2H
51 PUSH ex ; 2
50 PUSH AX
E897F9 CALL KBGETEXPR
A31800 MOV ENDOFF, AX
IF END$OFF<ARG1.OFF THEN GOTO ERROR;
; STATEMENT # 296
A11800 MOV AX, ENDOFF
3B061A00 CMP AX, ARG
7303 JNB $+5H
E98FF7 JMP ERROR
ТЕ CHAR<>KBCOM THEN GOTO ERROR;
; STATEMENT # 298
803E5A0011 CMP CHAR,11H
7403 12 $+5Н
E985F7 JMP ERROR
CALL KB$BLANK$ADDR$FIELD(1); /* THIRD ARGUMENT #/
; STATEMENT # 300
8001 MOV AL, 1H
50 PUSH AX ; 1
E881F8 CALL KBBLANKADDRFIELD
CALL KB$GET$CHAR;
; STATEMENT
E85BF9 CALL KBGETCHAR
CALL KB$GET$ADDR(@ARG3,ARG1,SEG,1);
; STATEMENT
8D061E00 LEA AX,ARG3
1E PUSH DS 5 1
50 PUSH AX ‚ 2
FF361C00 PUSH ARG1+2H ; 3
8001 MOV AL,1H
50 PUSH AX ; 4
ЕЗВІРА CALL KBGETADDR
IF CHAR<>KBPER THEN СОТО ERROR;
; STATEMENT
# 301
# 302
# 303
33
Р,/М-86 COMPILER SDK86 KEYPAD MONITOR PAGE
305
306
308
310
311
314
315
316
317
го го
ОА50 803Е5А0010 СМР CHAR, 109
0455 7403 42 $+5Н
0457 Е962Р7 ]МР ERROR
LOOP:
; STATEMENT $ 305
LOOP:
MEMORY$ARG3 = MEMORYSARG1;
OASA C41E1A00 LES BX,MEMORYARGIPTR
0А5Е 268407 MOV AL, ES: MEMORYARG1! ВХ)
0А61 СУТЕ1ЕОО LES BX,MEMORYARG3PTR
0465 268807 MOV ES: МЕМОЯУАЯС 3’ ВХ), А,
ТЕ MEMORY$ARG3<>MEMORY$ARG1 THEN GOTO ERROR;
; STATEMENT # 306
0А68 СЦ1ЕТЕОО LES BI,MEMORYARG3PTR
ОА6С 268407 MOV AL, ES: MEMORYARG З” BX]
OA6F C41E1A00 LES BX,MEMORYARGIPTR
0А73 263407 CMP AL,ES: MEMORYARG1[ BX]
0476 7503 JZ $+5H
0478 E9H1P7 JMP ERROR
ЇР ARG1.OFF = ЕМОЗОРР THEN RETURN;
; STATEMENT # 308
ОАТВ А11А00 MOV AX,ARG1
ОДТЕ 3В061800 СМР АХ, ЕНООЕР
04,82 7502 JNZ @55
; STATEMENT # 309
084 5D POP BP
0485 СЗ RET
055:
ARG1.OFF = ARG1.OFF + 1;
STATEMENT # 310
0486 830614Ү0001 ADD ARG1,14
АЯСЗ.ОРР з АВСЗ,ОРЕ + 1;
; STATEMENT Ф 311
0А88 83061Е0001 ADD ARG3,148
GOTO LOOP;
STATEMENT # 312
ОА90 EBC8 ЈМР LOOP
END;
KBMOVE ENDP
КВЗТНРИТ:
; ФТАТЕМЕМТ # 314
/9 PROMPTS FOR А PORT WORD IN THE ADDRESS FIELD. WHEN A COMMA
IS ENTERED THE BYTE OR WORD IS DISPLAYED IN THE DATA FIELD.
THIS MAY BE REPEATED FOR MULTIPLE READING OF THE PORT. PERIOD
TERMINATES THE COMMAND. %/
KBINPUT PROC NEAR
092 55 PUSH BP
0493 8BEC MOV BP,SP
PROCEDURE;
DECLARE PORT WORD;
CALL KBSBLANKSADDRSFPIELD(1); /8 PROMPT FOR PORT ?/
; STATEMENT # 316
0495 8001 MOV АС, ТВ
097 50 РИЗН АХ ..1
0498 Е823Ғ8 CALL KBBLANKADDRFIELD
CALL КВЗСЕТЗСНАЙ;
34
»./М-36 COMPILER
SDK86 KEYPAD MONITOR PAGE
; STATEMENT # 317
ОА9В ESFDF8 CALL KBGETCHAR
18 2 PORT = KB$GET$EXPR(ADDR$FIELD,1, BLANK); /9 GET PORT NUMBER 1.
: STATEMENT 4 318
ОАЗЕ 8001 MOV AL,1H
ОААО 50 PUSH AX : 1
OAA1 50 PUSH AX ; 2
OAA2 50 PUSH AX : 3
ОДАЗ ЕВОЕЕ9 CALL KBGETEXPR
ОАА6 А35200 MOV PORT, АХ
319 2 CALL KB$SOUT$WORD( PORT,ADDRSFIELD,9, BLANK); /® REMOVE PROMPT #/
; STATEMENT # 319
ОАА9 FF365200 PUSH PORT ; 4
ОААРр 8001 MOV AL,1H
OAAF 50 PUSH AX ; 2
ОАВО 8100 MOV CL,OH
OAB2 51 PUSH cx ка
ОАВЗ 50 PUSH AX ; 5
OABY ЕВ5ЕР8 CALL KBOUTWORD
320 2 LOOP:
; STATEMENT # 320
LOOP:
ОАВ? 803E5A0011 CMP CHAR, 11H
OABC 7403 JZ $+5H
ОАВЕ ЕЗЕВЕбБ JMP ERROR
IF CHAR<>KBCOM THEN GOTO ERROR;
322 2 IF WORD$MODE THEN
; STATEMENT # 322
ОАС1 А06000 MOV AL,WORDMODE
ОАСЧ 0008 RCR AL,1
ОАС6 7310 JNB 857
323 2 CALL KB$OUT$WORD(INWORD(PORT),DATA$FIELD,O,NOBLANK);
; STATEMENT # 323
0АС8 8В165200 MOV DX,PORT
OACC ED INW DX
OACD 50 PUSH AX : 1
ОАСЕ 8000 МОУ AL,OH
OADO 50 PUSH AX ; 2
ОАр1 50 PUSH AX : 3
OAD2 50 PUSH AX : 4
ОА03 ЕВЗЕЕ8 CALL KBOUTWORD
ОА06 ЕВОС JMP 058
057:
ELSE
324 2 CALL KB$OUT$BYTE( INPUT( PORT) ,0);
: STATEMENT # 324
0408 8В165200 МОУ ОХ, РОЯТ
OADC EC IN DX
OADD 50 PUSH AX e
OADE 8000 MOV AL, ОН
ОАЕО 50 PUSH AX : 2
ОАЕ1 E8F1F7 CALL KBOUTBYTE
058:
325 2 CALL KB$GET$CHAR;
; STATEMENT # 325
ОАЕЦ E8SBNNF8 CALL KBGETCHAR
326 2 IF CHAR=KBPER THEN RETURN;
PL/M-86 COMPILER 50К86 KEYPAD MONITOR PAGE
328
329
330
331
332
333
334
335
337
338
333
го
; STATEMENT # 326
ОДЕ? 803Е5А0010 CMP CHAR, 10H
ОАЕС 7569 JNZ LOOP
; STATEMENT # 327
ОАБЕ 5D POP BP
ОАЕР СЗ RET
GOTO LOOP;
END;
KBINPUT ENDP
KBSOUTPUT:
; STATEMENT # 330
/* PROMPTS FOR A PORT WORD IN THE ADDRESS FIELD AND A BYTE OR
WORD DATUM IN THE DATA FIELD. THIS DATUM IS OUTPUT A SINGLE TIME
TO THE SPECIFIED PORT. 2?/
KBOUTPUT PROC NEAR
ОАРО 55 PUSH BP
OAF1 8BEC MOV ВР, ЭР
PROCEDURE;
DECLARE (DATUM,PORT) WORD;
CALL KBSBLANKS$ADDRSFIELD(1); /9 PROMPT FOR PORT %/
; STATEMENT # 332 |
ОАЕЗ 8001 MOV AL,1H
2АҒ5 50 PUSH AX . 1
ОДЕб E8C5F7 CALL KBBLANKADDRFTELD
CALL KBSGETS$CHAR;
; STATEMENT # 333
0АҒ9 E89FFS CALL KBGETCHAR
PORT = KBSGETSEXPR(ADDRS$FIELD,1, BLANK);
; STATEMENT # 334
OAFC 8001 MOV AL, 1H
OAFE 50 PUSH AX ; 1
OAFF 50 PUSH AX ; 2
овоо 50 PUSH AX ; 3
ово! E8B1F8 CALL KBGETEXPR
0804 A35600 MOV PORT,AX
ТЕ CHAR<>KBCOM THEN GOTO ERROR;
; STATEMENT # 335
0807 803Е5А0011 CMP CHAR,11H
080С 7403 JZ $+5Н
OBOE E9ABF5 ЈМР ERROR
CALL KB$OUT$WORD(PORT,ADDR$FIELD,O,BLANK); /% REMOVE PROMPT %/
; STATEMENT # 337
9811 FF365600 PUSH PORT ма
0815 8001 MOV AL,1H
0817 50 PUSH AX га
0818 8100 MOV CL,OH
ОЗТА 51 PUSH СХ # У
0818 50 PUSH AX ; 4
ОВІС БВЕбЕ? . CALL KBOUTWORD
CALL KBSBLANK$DATA$FIELD(1); /9 PROMPT FOR DATUM ?/
; STATEMENT # 338
ОВТЕ 8001 MOV AL,1H
0821 50 PUSH AX ;: 1
3822 E882F7 CALL KBBLANKDATAFTELD
CALL KBSGETSCHAR;
; STATEMENT # 339
36
PL/M-36 COMPILER
SDK86 KEYPAD MONITOR
А
» (373 2,
0825 Е873Ғ8 CALL KBGETCHAR
340 2 LOOP:
: STATEMENT # 340
LOOP:
0828 А06000 MOV AL,WORDMODE
овгв DOD8 RCR AL, 1
OB2D 7308 JNB 861
ТЕ WORD$MODE THEN
341 2 DATUM = KB$GET$EXPR(DATA$FIELD,1,NOBLANK); / GET DATUM WORT
STATEMENT # 341
ОВ2Е 8009 MOV АС, ОН
0831 59 РОЗН АХ Л
0832 8101 MOV CL,1H
0834 51 РУЗН CX Е e
0835 EBO8 ЈМР 618
861:
ELSE
342 2 DATUM = KB$GET$EXPR(DATASBYTE,1,NOBLANK); /8 GET DATUM ВҮТ- ,
; STATEMENT # 342
0837 ВОҒЕ MOV AL,OFFH
0839 50 РОЗН АХ 5 4
ОВЗА 8001 MOV AL,1H
ОВЗС 50 PUSH AX га
0830 8000 MOV AL,OH
818:
ОВЗЕ 50 РУЗН АХ г.в
0840 E872F8 CALL KBGETEXPR
0843 A35400 MOV DATUM, АХ
343 2 ТЕ CHAR=KBCOL THEN GOTO ERROR;
; STATEMENT # 343
0846 803E5A0014 CMP CHAR,14H
0848 7503 JNZ $+5Н
0840 E96CF6 ]МР ERROR
345 2 ТЕ WORD$MODE ТНЕМ
: ЗТАТЕМЕНТ # 345
0850 А06000 MOV AL,WORDMODE
0853 0008 RCR AL, 1
0855 730A JNB 064
346 2 OUTWORD( PORT) = DATUM;
; STATEMENT 4 345
0857 88165600 MOV DX,PORT
ОВ5В A15400 MOV AX, DATUM
0855 EF OUTW DX
OBSF 2808 JMP 965
064:
ELSE
347 2 ОЈТРЏТ(РОВТ, = LOW( DATUM);
| ; STATEMENT # 347
0861 115500 MOV AX, DATUM
0864 88165600 MOV DX,PORT
0868 ЕЕ OUT DX
@65:
348 2 ТЕ CHAR=KBCOM THEN /* MULTIPLE OUTPUTS #/
; STATEMENT й 348
0869 803E5A0011 CMP CHAR, 11H
OB6E 7510 JNZ 266
349 2
00:
37
РО/М-86 COMPILER
351
352
354
355
356
291
358
359
360
0870
0872
0873
0876
0879
0875
0880
0881
0096
0090
0042
О0А5
00А7
00АС
OOAD
ООАЕ
0081
0083
0084
0086
0087
ООВС
00BD
ООВЕ
9060
О0С 1
00C3
ООСЦ
00С7
SDK86 KEYPAD MONITOR
CALL КВЗВГАМКЗОАТАЗЕТЕ:О( 1);
; STATEMENT #
AL,1H
AX ; 1
KBBLANKDATAFIELD
; STATEMENT #
KBGETCHAR
IF CHAR<>KBPER THEN GOTO LOOP;
8001 MOV
50 PUSH
Е831Е7 CALL
CALL КВЗСЕТЗСНАЯ;
E822F8 CALL
803Е5А0010 СМР
7548 УМ 2
END;
866:
END;
50 РОР
C3 RET
KBOUTPUT
; STATEMENT #
CHAR, 108
LOOP
; STATEMENT 1
; STATEMENT і
BP
ENDP
лаававааваавав оао ава ваа аа аа ава ааа ааа аа
ы COMMAND DISPATCH MAIN PROGRAM LOOP ”
вагававовав наа ааа наа соо ва ва даваа ааа /
DISABLE;
; STATEMENT #
FA CLI |
2E8E 169800 MOV 55, СЗ: @@STACK$FRAME
ВС5000 MOV SP,@@STACK$OFFSET
8 BEC MOV ВР, SP
2E8E1E9A00 MOV DS,CS:@@DATAS$FRAME
FB STI
РА CLI
OUTPUT(KB$STATS$PORT) = KBSINITSMODE;
; STATEMENT 8
BAEAFF MOV DX,OFFEAH
8000 MOV АС, ОН
БЕ OUT DX
OUTPUT(KB$STAT$PORT) = KBSINITSSCAN;
; STATEMENT В
8039 MOV AL, 39H
EE OUT DX
CALL KBSDISPLAY( @KBSSIGNON,ADDR$FIELD,9);
; STATEMENT %
2E8D061F00 LEA АХ, СЗ: KBSIGNON
ОЕ PUSH 65 . 1
50 PUSH АХ 14
8001 MOV AL,1H
50 PUSH AX #72
8000 моу АБ, ОН
50 РУЗН АХ : 4
ЕВВАО 1 CALL KBDISPLAY
CALL КВЗОТЗРЬАУ ( @KB$VERSION, DATASFIELD,0O);
2Е80062300 LEA
; STATEMENT #
AX,CS:KBVERSION
PAGE 38
350
351
396
353
355
356
/% INIT 8279 #/
397
358
/% SIGN ОМ MESSAGE #/
359
/% VERSION NUMBER #/
360
PL/M-86 COMPILER SDK86 KEYPAD MONITOR | PAGE 39
00СС ОЕ РОЗН 65 ; 1
0060 50 PUSH АХ ; 2
ООСЕ 8000 MOV AL,OH
0000 50 PUSH AX ; 3
0001 50 РОЗН АХ . y
0002 E87CO1 CALL KBDISPLAY
/* INITIALIZE USER'S REGISTERS #/
361 1 CS,SS,DS,ES,FL,IP = 0;
; STATEMENT # 361
0005 880000 MOV АХ,ОН
0008 A33E00 MOV REGSAV+10H,AX
OODB A34200 MOV REGSAV+14H, AX
OODE A34000 MOV REGSAV+12H, AX
00Е1 A34400 MOV REGSAV+16H, AX
OOE4 A 34800 MOV REGSAV+1AH, АХ
00Е7 A34600 MOV REGSAV+18H, AX
362 1 SP = USER$INIT$SP;
; ЗТАТЕМЕЧТ # 362
OOEA С70636000001 MOV REGSAV+8H, 100H
363 1 CALL INIT$INT$VECTOR(@INT$VECTOR(1),,INTERRUPTI$ENTRY);
; ФТАТЕМЕНТ # 363:
00Ғ0 80060400 LEA АХ, INTVECTOR+4H
OOF4 ЛЕ PUSH DS ` :1
00Ғ5 50 PUSH AX ; 2
OOF6 B87D06 MOV AX, OFFSET( INTERRUPTIENTRY )
00Е9 50 PUSH AX
OOFA Е80С06 CALL INITINTVECTOR
364 1 CALL INIT$INT$VECTOR( @INT$VECTOR(2),. INTERRUPT 3$ENTRY);
STATEMENT # 364
OOFD 80060800 LEA AX, INTVECTOR+8H
0101 1E PUSH DS ; 1
0102 50 PUSH AX ; 2
0103 В8ЕСОб MOV AX, OF FSET( INTERRUPT 3ENTRY )
0106 50 PUSH AX ; 3
0107 Е8ЕЕС5 CALL INITINTVECTOR
365 1 CALL INITSINT$VECTOR( @INT$VECTOR(3),.INTERRUPT3$ENTRY);
; STATEMENT # 365
010A 8D060C00 LEAS AX, INTVECTOR+0CH
010E 1E PUSH DS ; 1
ОТОЕ 50 РОЗН АХ : 2
0110 B8ECO6 MOV AX, OFFSET( INTERRUPT3ENTRY)
0113 50 PUSH AX ; 3
0114 ЕВЕ205 CALL INITINTVECTOR
366 1 BRK1$FLAG = FALSE;
; STATEMENT # 366
0117 С606580000 MOV BRK1FLAG, ОН
367 1 MONITOR$STACKBASE = STACKBASE; /% SAVE MONITOR STACK VALUES %/
; STATEMENT # 367
011C 8Ср0 MOV AX,SS
ОТТЕ A31600 MOV MONITORSTACKBASE, AX
368 1 MONITOR$STACKPTR = STACKPTR;
; STATEMENT # 368
0121 89Е0 MOV AX,SP
0123 A31400 MOV MONITORSTACKPTR, AX
369 1 СОТО AFTERSERROR;
Р./М-86 COMPILER
9125 2810 JMP AFTERERROR
370 1 NEXT$COMMAND:
: STATEMENT # 370
/% THIS IS THE PERPETUAL COMMAND LOOP WHICH DISPATCHES TO EACH
COMMAND WHICH ІЗ A SEPARATE PROCEDURE, 8/
NEXTCOMMAND:
0123 2£80061300 LEA АХ, С5: КВСММОРМТ
0120 95 PUSH 05 20
0122 50 PUSH AX : 2
0122 8001 MOV AL, ТВ
0131 59 PUSH AX 53
0132 8000 MOV АБ, ОН
0134 50 РУЗН АХ : 4
0135 281901 CALL KBDISPLAY
CALL KBSDISPLAY( @KBSCMNDS$PMT,ADDRSFIELD,O);
371 1 AFTERSERROR:
; STATEMENT # 371
AFTERERROR:
CALL KB$GETS$CHAR;
0138 £86002 CALL KBGETCHAR
372 1 CALL КВУВЬАНКЗАРрОН3ЕТ2 1, 0( 0);
; ЗТАТЕМЕНТ # 372
0138 8000 MOV AL,OH
0130 50 PUSH AX а: 3
0132 237001 CALL KBBLANKADDRFTIELD
373 1 CALL KB$BLANK$DATA$FIELD(O);
; STATEMENT # 373
0141 8000 MOV AL,OH
0143 50 PUSH AX . 4
0144 £86001 CALL KBBLANKDATAFTELD
374 1 ЇР (LAST$COMMAND:=CHAR)>O9OH THEN GOTO ERROR;
; STATEMENT # 374
0147 A05A00 MOV AL,CHAR
ОТЧА А26100 MOV LASTCOMMAND,AL
0140 3С09 CMP АС, ЭН
0148. 7768 ЈА ERROR
376 1 WORDSMODE = FALSE;
; STATEMENT # 376
0151 С606600000 MOV НОВОМООЕ , ОН
377 1 00 САЗЕ СНАН;
; ЗТАТЕМЕМТ # 377
0156 8A1E5A09 MOV BL, CHAR
015А 8700 MOV ВН, ОН
0156 0753 SLL ВХ, 1
0155 2Е?ЕА7?9501 JMP С5:9102° ВХ)
378 2 CALL КВЗЕХАМЗМЕМ;
379 а CALL ХВЗЕХАМЗНЕО;
; STATEMENT # 379
871:
0163 689007 CALL KBEXAMREG
0156 2841 ЛИР АРТЕВСОММАМО
330 2 CALL 68339:
50636 <EYPAD MONITOR
; STATEMENT # 369
; STATEMENT # 380
PAGE
40
PL/M-86 COMPILER
381
382
383
384
385
389
393
397
398
юм
0168
0168
0160
0170
0172
0175
0177
0170
017Е
0181
0186
0189
0188
0190
0193
0195
0197
0199
0198
0190
ОТ9Е
01А1
ОТАЗ
ОТА5
01А7
SDK86 KEYPAD MONITOR
E8BFO5 CALL KBGO
EB3C JMP AF TERCOMMAND
CALL KB$SINGLES$STEP;
; STATEMENT # 381
87 3:
E84906 CALL KBSINGLESTEP
ЕВЗТ ЈМР AFTERCOMMAND
CALL KB$INPUT;
CALL KB$OUTPUT;
CALL KB$MOVE;
; STATEMENT # 384
076:
587008 CALL KBMOVE
EB32 JMP AFTERCOMMAND
DO; WORD$MODF = TRUE; CALL КВ$ЕХАМ$МЕМ; END;
877:
: STATEMENT # 386
C6066000FF МОУ WORDMODE, OF FH
: STATEMENT й 387
@19:
E86106 CALL KBEXAMMEM
; STATEMENT 4 388
EB28 | ЈМР AFTERCOMMAND
DO; WORD$MODE = TRUE; CALL KB$INPUT; END;
878:
; STATEMENT # 390
С6066000ЕҒ MOV WORDMODE, OF FH
; STATEMENT # 391
821:
280909 CALL KBINPUT
; STATEMENT й 392
ЕВІЕ ЈМР AFTERCOMMAND
DO; WORD$MODE = TRUE; CALL KB$OUTPUT; END;
079:
; STATEMENT # 394
С6066000ҒҒ MOV WORDMODE,OFFH
; STATEMENT # 395
025:
E85D09 CALL KBOUTPUT
; STATEMENT # 395
ЕВ14 ЈМР AFTERCOMMAND
END;
; STATEMENT # 397
@102:
7001 ри 019
6301 ри 871
6801 DW 872
6D01 DW 873
8601 DW 821
9001 DW 825
7201 ри 876
7701 DW 877
8101 DW 978
8801 ри 279
AFTER$SCOMMAND:
; STATEMENT # 398
PAGE
41
2./М-86 COMPILER
399
500
403
го
ОТА9
ОТАС
ОТАЕ
0183
0185
0186
0189
ОТ ВС
ОТВЕ
01С1
0106
01СВ
01CC
01CD
01CF
9100
0102
0103
0105
0108
0109
0106
01DF
01Е2
ОТЕЦ
0129
01ЕС
01ЕЕ
SDK86 KEYPAD MONITOR PAGE
AFTERCOMMAND:
BC5000 MOV SP,8@STACK$OFFSET
8BEC MOV BP,SP
2E8E1E9A00 MOV 05,05:88рАТАЕНАМЕ
8000 MOV АС, ОН
50 РОЗН АХ ; 1
E8EE00 CALL KBBLANKDATAFIELD
CALL KB$BLANK$DATAS$FIELD(0);
GOTO МЕХТЗСОММАНО ;
; STATEMENT # 399
Е96СҒЕ ЈМР МЕХТСОММАКО
ERROR:
; STATEMENT # 400
/е THIS ROUTINE HANDLES ALL ERRORS DETECTED BY THE MONITOR AND WILL
OUTPUT THE ERROR MESSAGE TO THE DISPLAY AND THEN JUMP TO
"AFTERSERROR' TO GET ANOTHER COMMAND. %/
ERROR:
BC5000 MOV ЗР , ВО ЗТАСКЗОРЕЗЕТ
8 ВЕС МОУ ВР,5Р
2Е8Е1Е9А00 MOV 05 ,С5: @@DATA$FRAME
2Е8р062800 LEA AX,CS:KBERRMSG
ОЕ PUSH cs а
50 PUSH AX = <2
8001 MOV AL,1H
50 PUSH AX 5 3
8000 MOV АС, ОН
50 PUSH AX ; 4
Е87800 CALL KBDISPLAY
CALL KBSDISPLAY( @KB$SERRSMSG ,ADDRS$FIELD,O);
CALL KB$BLANKS$DATA$FIELD(0);
; STATEMENT # 401
8000 MOV АБ, ОН
50 РОЗН АХ : 1
ЕЗСВОО CALL KBBLANKDATAFTIELD
СОТО AFTERSERROR;
; STATEMENT # 402
EX9SOFF ЧМР AFTERERROR
AFTERSINTERRUPT:
; STATEMENT # 403
из THIS ROUTINE CHECKS FOR THE LAST COMMAND WHEN THE MONITOR IS
REENTERED VIA THE INTERRUPT VECTOR, %/
AFTERINTERRUPT:
ВС5000 MOV 5Р,ЗӨ5ТАСКЗОЕЕЗЕ”Т
38ЕС MOV BP,SP
2E8E1E9A00 MOV DS,CS: 449DATASFRAME
405800 MOV AL,BRKISLAG
0008 АСА AL, 1
827;
7 389 JNB AFTERCOMMAND
IF BRKISFLAG THEN
00,
MEMORY3BRK1 = BRKISSAVE;
; STATEMENT 9 405
42
2./М-86 COMPILER
408
409
410
414
w ~
са Nw
01Ғ0
ОТЕЗ
О1Е7
ОТЕА
01ҒЕ
0202
0205
0206
0209
0200
020Е
0212
0214
0216
0218
0219
021А
0210
021F
0221.
0225
0226
0228
0226
0220
022F
0231
0233
0231
0235
0237
0239
023B
0240
0245
0246
0247
0249
O24A
O24B
024E
50К86 KEYPAD MONITOR PAGE
А05900 MOV AL, BRKISAVE
C4182200 LES BX,MEMORYBRKIPTR
268807 MOV ES:MEMORYBRK1_ BX],AL
BRKI$FLAG = FALSE;
; STATEMENT # 406
C606580000 MOV BRKIFLAG,OH
IF ((ІР-1) AND OOOFH)=(BRK1.0FF AND OOOFH) AND
; STATEMENT # 407
A14600 MOV AX, REGSAV+18H
836801 SUB AX, АН
50 PUSH AX ; 1
250F00 AND АХ,ОЕН
8В0Е2200 MOV CX, ВЕК 1
51 PUSH ех : 2
81E10F00 AND CX,OFH `
3ВС1 СМР АХ, СХ
ВОЕЕ MOV AL, ОЕЕН
7401 42 $+3H
40 ІМС АХ
SA POP DX : 2
8756FE XCHG DX,.BP]-2H; 1
B104 MOV CL,4H
D3EA SHR DX, CL
03163E00 ADD DX,REGSAV+10H
5B POP BX 5.3
ОЗЕВ SHR BX,CL
031E2400 ADD BX,BRK1+2H
50 PUSH AX ; 4
3BD3 CMP DX, BX
BOFF MOV AL,OFFH
7401 41 $+3H
40 INC AX
59 POP CX “1
2201 AND ñL СЕ
0008 RCR AL, 1
7383 JNB 827
(SHR(IP-1,4)+CS)2s(SHR(BRK1.,0FF,4)+BRK1.SE3) THEN
00;
IP = IP « 1:
; ЗТАТЕМЕМТ й 409
832E460001 SUB REGSAV+18H,1H
CALL KB$DISPLAY(@KB$BRK1,DATA$FIELD,0);
; STATEMENT # 410
2Е8р063 300 LEA А.Х, СЗ: КВВЕК 1
ОЕ PUSH CS # 1
50 PUSH AX ; 2
В000 MOV АБ, ОН
50 PUSH AX ; 3
50 PUSH AX ; 4
E80300 CALL KBDISPLAY
GOTO НЕХТЗСОММАНО ;
; STATEMENT # 411
EQ9D7FE JMP NEXTCOMMAND
END;
END;
GOTO AFTER$COMMAND;
43
PL/M-86 COMPILER SDK86 KEYPAD MONITOR PAGE 44
415 1 END MONITOR; /% END OF MODULE #/
EOF
Р /Ме86 COMPILER SDK86 KEYPAD MONITOR PAGS 45
CROSS@eREFERENCE LISTING
DEFN ADDR SIZE
NAME, ATTRIBUTES, AND REFERENCES
5 ADDRFIELD LITERALLY
16 32 108 113 119 205 229 272 295
313 319 334 337 359 379 300
398 O1A9H AFTERCOMMAND LABEL
172 411
371 0138H AFTERERROR LABEL
369 402
403 01ФЕН AFTERINTERRUPT LABEL
180
106 0000H 4 ARG STRUCTURE BASED(PTR)
107 108 112 113
9 ООТАН 4 ARG! STRUCTURE AT
225 229 257 258 290 296 302 308 310
9 ООТЕН 1 ARG3 STRUCTURE AT
302 311
34 0006Н 1 B BYTE PARAMETER AUTOMATIC
35 a” 38
6 BLANK LITERALLY
46 108 113 119 229 295 318 319 334
БЕ ki
62 0004Н 1 BLANKING BYTE PARAMETER AUTOMATIC
63 76 87 9 6
41 0004Н 1 BLANKING BYTE PARAMETER AUTOMATIC
42 46
13 ЕНҒЕҒӨН 2 BLOCK8089 | WORD AT INITIAL ABSOLUTE
13 ЕНЕЕЕВН 4 BLOTK8089PTR POINTER АТ INITIAL ABSOLUTE
11 ЕНҒЕҒОН 1 80011 BYTE ARRAY(1) AT INITIAL ABSOLUTE
11 FHFFF1H 2 BOOT2 WORD ARRAY(1) AT INITIAL ABSOLUTE
11 FHFFF3H 2 B00T3 WORD ARRAY(1) AT INITIAL ABSOLUTE
12 0000Н 4 BOOTY WORD ARRAY(2) DATA
10 BP LITERALLY
150
PL/M=86 COMPILER
SDK86 KEYPAD MONITOR
BREAKINST
BRK1
ВАКТЕСАС
BRKISAVE
CHAR
19 COPYRIGHT
6
9 0022Н
5 0058Н
5 930598
5 005АН
4 00088
183
10
9 0026Н
6
6
331 0054H
105 9006H
5 0058Н
15 0000Н
10
CORRECTION
CS
CSIP
DATABYTE
DATAFIELD
DATUM
DEFAULTBASE
DISP
DISPLAY
DOUBLE
DS
LITERALLY
198 199
STRUCTURE AT
194 407
BYTE
201 366 403
BYTE
197 405
BYTE
60 67 74
100 109 114
214 226 234
275 278 282
343 348 352
BYTE ARRAY(19)
LITERALLY
185
LITERALLY
121 124 225
STRUCTURE АТ
120 121 128
217
LITERALLY
74 85 94
LITERALLY
28 39 231
410
WORD
341 342 346
WORD PARAMETER
106 107
BYTE ARRAY(3)
36 37 38
ЕТО. 271 272
BYTE
20
BUILTIN
84
LITERALLY
361
BASED( PTR)
406
73 89
124 163
236 240
291 298
374 377
DATA
290 407
165 166
247 342
239 273
JAT
AUTOMATIC
39 цц
АНВАХ (1)
83
179
248
303
49
Зу
189
254
320
207
343
50
РАСЕ 46
97 99
195 203
265 267
326 335
208 216
341 362
54 269
Р /М-36
400
62
41
153
174
COMPILER
0018H
01ВСН
0006H
0008H
0008H
0064H
005FH
0709H
0088H
0006H
067DH
ОбЕСН
ОООЦН
0000H
2
33
12
20
SDK86 KEYPAD MONITOR
ENDOFF
ERROR
ES
FALSE
FIELD
FIELD
FIELD
FL
GOCOMMAND
1
INITINTVECTOR
INITINTVECTORCODE
INITINTVECTORCODEPTR
INPUT
INTERRUPTIENTRY
INTERRUPT3ENTRY
INTROUTINEOFFSET
INTVECTOR
WORD
295 296 308
LABEL
72 81 101 115 171 196 200 204
227 241 244 249 252 266 279 292
299. 304 307 321 336 349 375
LITERALLY
361
LITERALLY
366 376 406
BYTE PARAMETER AUTOMATIC..
15 16
BYTE PARAMETER AUTOMATIC
63 69 74 76 85 87 94 95
BYTE PARAMETER AUTOMATIC
42 54
LITERALLY
159 167 209 218 361
LITERALLY
BYTE
267 270 271 273 280 282 284
BYTE
19 20 21 43 4y 8 49 50
134 135 145 147
PROCEDURE STACK=000EH
363 364 365
BYTE ARRAY(15) DATA
183
WORD DATA
184
BUILTIN
57 60 324
PROCEDURE INTERRUPT(1) STACK=0034H
363
PROCEDURE INTERRUPT(3) STACK=0006H
364 365
WORD PARAMETER AUTOMATIC
183 185
POINTER АННАҮ(5)
PAGE
239
297
97
PL/M-86
182
30
26
105
56
COMPILER
0006H
02BEH
02А7Н
00374
00338
0018Н
0251Н
0028Н
ОТЕОН
0903H
002FH
0501H
039BH
23
23
86
79
26
SDK86 KEYPAD MONITOR
INTVECTORPTR
INWORD
LP
KBBLANKADDRFIELD
KBBLANKDATAFIELD
KBBLANKS
KBBRK1
KBCMNDPMT
KBCOL
KBCOM
KBDATAPORT
KBDISPLAY
KBERRMSG
KBEXAMMEM
KBEXAMREG
KBEXEC
KBGETADDR
KBGETCHAR
363 36% 365
POINTER PARAMETER AUTOMATIC
183 18% 185
BUILTIN
323
LITERALLI
119 120 215 361 407 409
PROCEDURE STACK=z0010H
126 191 223 263 288 293 300 316
372
PROCEDURE STACK=0010H
127 192 206 338 350 373 398 401
BYTE ARRAY(4) DATA
28 32
BYTE ARRAY(4) DATA
410
BYTE ARRAY(4) DATA
370
LITERALLY
97 109 11% 343
LITERALLY
97 124 163 189 214 226 236 240
275 278 291 298 320 335 348
LITERALLY
23 60
PROCEDURE STACK=000AH
28 32 39 54 69 205 272 359
370 400 410
BYTE ARRAY(4) DATA
400
PROCEDURE STACK20030H
378 387
PROCEDURE STACK=0024H
379
BYTE ARRAY(4) DATA
205
PROCEDURE ЗТАСК-002СН
128 194 225 290 302
PROCEDURE 5ТАСК-0002Н
PAGE
360
48
PL/M-86
62
187
311
287
34
COMPILER
03B5H
O72AH
0Х92Н
09Е5Н
0205Н
OAFOH
0315Н
ООЦВН
143
94
173
64
146
134
28
SDK86 KEYPAD MONITOR
KBGETEXPR
KBGO
KBINITMODE
KBINITSCAN
KBINPUT
KBINRDY
KBMINUS
KBMOVE
KBOUTBYTE
KBOUTPUT
KBOUTWORD
KBPER
KBPLUS
KBREG
KBREGKEY
KBREGPMT
KBSTGNON
70 77 88 122 111
264 274 289 294 301
191371
PROCEDURE WORD STACK=0020H
108 113 239 247 277
342
PROCEDURE STACK=0034H
38.
LITERALLY
357
LITERALLY
358
PROCEDURE 58ТАСК-0024Н
382 391
LITERALLY
57
LITERALLY
99
PROCEDURE STACK=0030H
384
PROCEDURE STACK=0012H
75 86 95 122 232
PROCEDURE STACK=0024H
383 395
PROCEDURE STACK=0016H
76 87 95 119 229
337
LITERALLY
97 128 170 195 203
275 278 282 303 325
LITERALLY
64 91 99
BYTE ARRAY(28) DATA
270. дз
LITERALLY
67
BYTE ARRAY(4) DATA
59
BYTE ARRAY(4) АТА
359
*23
317.
295
324
234
352
PL/M-86
212
118
340
320
COMPILER
07В9Н
0550Н
0023H
0061H
00384
ОАБАН
овган
ОАВТН
0000H
ООТАН
0000H
001ЕН
0000H
00229
00009
0026H
0000H
SDK86 KEYPAD MONITOR
39 KBSINGLESTEP
KBSTATPORT
101 KBUPDATEIP
4 КВУЕВЗІОМ
1 LASTCOMMAND
16 LED
LOOP
LOOP
LOOP
LOW
1 MEMORYARG1
ü MEMORYARGIPTR
1 MEMORYARG3
ü MEMORYARG3PTR
1 МЕМОВТВАК!
Ч MEMORYBRKIPTR
1 MEMORYCSITP
ü MEMORYCSIPPTR
2 MEMORYUSERSTACK
PROCEDURE 5ТАСК-0034Н
381
LITERALLY
17 18 oT 59 357 358
PROCEDURE STACK=0030H
162 188 213
BYTE ARRAY(4) DATA
360
BYTE
160 37%
BYTE ARRAY(16) DATA
37 38 44
LABEL
312
LABEL
323
LABEL
328
BUILTIN
72 86 95 250 251 347
BYTE ВАЗЕО(МЕМОНХАВСЯРТЯ) `
232 250 251 305 305
POINTER
9 231 232 242 243 #250 251
BYTE BASED( MEMORYARG3PTR)
305 306
POINTER
9 305 306
BYTE BASED( МЕМОНҮВНКЇРТН)
197 198 199 405
POINTER
9 197 198 199 405
BYTE BASED(MEMORYCSIPPTR)
122
POINTER
9 122
WORD BASED( MEMORYUSERSTACKPTR )
132 135 147 150
305
РАСЕ
306
50
Р /М-86 COMPILER
370
106
63
105
002АН
0000H
009CH
0016H
0014Н
0128H
0000H
0000H
0000H
0000H
0000H
0000H
0000H
0063H
0056H
0052H
ОООЦН
437
SDK86 KEYPAD MONITOR
MEMORYUSERSTACKPTR
MEMORYWORDARG1
MONITOR
MONITORSTACKBASE
MONITORSTACKPTR
NEXTCOMMAND
NOBLANK
OFF
OFF
OFF
OFF
OFF
OFF
OFF
OPER
OUTPUT
OUTWORD
PORT
PORT
PROMPTS
POINTER
9 132. 135 197 150
WORD BASED(MEMORYARG1PTR)
231 242 243
PROCEDURE STACK=0050H
WORD
157 178 367
WORD
156 177 368
LABEL
399 411
LITERALLY
231 239 247 213 277 323 341 342
WORD MEMBER(USERSTACK)
133 136 139 144 146 149 151 158
WORD MEMBER(CSIP)
120 165 207 216
WORD MEMBER( BRK1)
407
WORD МЕМВЕВ ( АКСЗ)
311
WORD МЕМВЕВ(АВСТ)
229 257 258 296 308 310
WORD MEMBER( VECTOR)
185
WORD MEMBER( ARG)
108 112 113
BYTE
64 91 100
BUILTIN
17 18 23 59 347 357 358
BUILTIN
346.
WORD
334 337 346 347
WORD
318 719 323 124
BYTE PARAMETER AUTOMATIC
PAGE
РЫ/М-86
62
41
3%
30
26
105
14
10
10
141
142
142
262
63
131
COMPILER
0006H
0006H
ОООЧН
00048
0008H
0004Н
0008H
0008H
0067H
002ЕН
0605H
0072H
00044
0050Н
ООЧАН
05858
0002H
0002H
11
28
95
22
80
50К86 KEYPAD МОНІТОЯ
PROMPTS
PROMPTS
PROMPTS
PROMPTS
PROMPTS
PROMPTS
PTR
PTR
REGORD
АЕСЗАУ
RESTOREEXECUTE
RESTOREEXECUTECODE
RESTOREEXECUTECODEPTR
SAVE
SAVE
SAVEREGISTERS
SEG
SEG
132 135
155 166
#25 213
86 87
106 108 113
BYTE PARAMETER AUTOMATIC
63 69 73 76 86
BYTE PARAMETER AUTOMATIC
42 54
BYTE PARAMETER AUTOMATIC
35 39
BYTE PARAMETER AUTOMATIC
31 32
BYTE PARAMETER AUTOMATIC
27 28
BYTE PARAMETER AUTOMATIC
15 21
POINTER PARAMETER AUTOMATIC
106 107 108 112 113
POINTER PARAMETER AUTOMATIC
15 20
BYTE ARRAY(11) DATA
135: 147
WORD ARRAY( 14)
73 119 120 121 128
143 144 147 150 159
208 209 216 217 218
361 362 407 409
PROCEDURE STACK=0008H
161 168 210 219
BYTE АННАҮ(22) DATA
142
WORD DATA
151
WORD
277 280
WORD
FS та 76 82 84
PROCEDURE STACK=0002H
158 179
WORD МЕМВЕВ(05ЕНЗТАСК)
138 143 191 155 176
WORD MEMBER( CSIP)
96
138
167
280
92
PAGE
139
207
290
93
52
РЬ /М-86
106
10
10
11
183
COMPILER
0002H
0002H
0002H
0002H
0002H
0062H
002АН
ООООН
1
SDK86 KEYPAD MONITOR
SEG
SEG
SEG
SEG
SEG
SHL
SHR
SP
55
SSCOMMAND
STACKBASE
STACKPTR
STARTADDR
STEPTRAP
TRUE
USERINITSP
USERSTACK
VECTOR
121 166 194
WORD MEMBER( BRK1
107
208
)
WORD MEMBER(ARG3)
WORD МЕМВЕВ (АВС 1
302
)
WORD MEMBER( VECTOR)
184
WORD MEMBER( ARG)
107 112
BUILTIN
84
BUILTIN
37 цц 407
LITERALLY
144
LITERALLY
143 361
LITERALLY
160
BUILTIN
155 157 176
BUILTIN
154 156 175
LITERALLY
11 12
LITERALLY
159 167 209
BYTE
20 22 23
LITERALLY
66 201 228
LITERALLY
362
STRUCTURE AT
133 136 138
154 155 175
178
177
218
268
PAGE 53
367
368
336 390 394
STRUCTURE BASED(INTVECTORPTR)
PL/M=86 COMPILER
222 OO4EH
63 OO4CH
41 000АН
5 0060H
MODULE INFORMATION:
CODE AREA SIZE
1
WORDMODE
VARIABLE AREA SIZE
з
СОНЗТАНТ AREA SIZE з
з
з
МАХІМОМ STACK SIZE
865 LINES READ
0 PROGRAM ERROR(S)
END OF Р,/М-86 COMPILATION
0B82H
ООООН
0065H
0050H
SDK86 KEYPAD MONITOR
184
WORD
239
WORD
65
WORD
2
BYTE
230
394
185
242
92
243
93
247
95
250
96
PARAMETER AUTOMATIC
цц
237
256
322
340
291
98
376
386
390
54
" ЧЕ) SDK-86 SERIAL МОМІТОВ
<. | А PL/M-86 SOURCE LISTING
P М-86 COMPILER SDK86 SERIAL MONITOR PAGE 1
ISIS-II PL/M-86 V1.1 COMPILATION OF MODULE MONITOR
OBJECT MODULE PLACED IN :F1:SERTAL.OBJ
° COMPILER INVOKED BY: PLM86 :F1:SERIAL.PLM LARGE OPTIMIZE(2) PAGEWIDTH(95)
қ $TITLE(*SDK86 SERIAL MONITOR’)
SNOINTVECTOR
АНЫЗ 555525541554 40045: йї)90:0:2:0:0 0(0:0: 0 00:0::й::ї ДААД,
ДИАЛ ЛЛ 55 ЛЛ 5555 555555555555 Қ 0 0 инока
50К-86 MONITOR, V1.2
06 AUGUST 1979
(С) 1978 INTEL CORPORATION. ALL RIGHTS RESERVED. Nu PART
OF THIS PROGRAM OR PUBLICATION MAY BE REPRODUCED, TRANSMITTED,
TRANSCRIBED, STORED ІМ A RETRIEVAL SYSTEM, OR TRANSLATED INTO Y
LANGUAGE, IN ANY FORM OR BY ANY MEANS, ELECTRONIC, MECHAN.CAL,
MAGNETIC, OPTICAL, CHEMICAL, MANUAL OR OTHERWISE, WITHOUT THE PRIOR
WRITTEN PERMISSION OF INTEL CORPORATION, 3065 BOWERS AVENUE, SANTA
CLARA, CALIFORNIA, 95051.
ЗАЛАЛ ЛЛ ЛД RRR RRR RRR RRR 5 Да ЛАДА ДАЛ ДА АЙЯ:
ооо ии ааа ааа вољан нивои ни
ABSTRACT
~ THIS PROGRAM IS THE ROM BASED SERIAL MONITOR FOR THE 50К-86. IT
PROVIDES THE USER WITH A MODERATE LEVEL OF CAPABLILITY TO
EXAMINE/MODIFY MEMORY AND REGISTERS, CONTROL PROGRAM EXECUTION,
AND LOAD/SAVE PROGRAMS.
ENVIRONMENT
THE SDK SERIAL MONITOR COMMUNICATES WITH THE USER VIA AN INTERACTIVE
TERMINAL (TTY,CRT) ATTACHED TO THE SERIAL PORT.
PROGRAM ORGANIZATION
THE PROGRAM Т5 DIVIDED INTO 1 DATA AND 2 CODE MODULES:
1. DATA DECLARATION MODULE. GLOBAL DATA DECLARATIONS.
| 2. СОММОМ ROUTINES. LOWER LEVEL PROCEDURES
ы 3. COMMAND MODULE. INDIVIDUAL COMMANDS AND OUTER BLOCK
CALLING "АРН
, >>COMMAND DISPATCH MODULE (OUTER BLOCK)
INDIVIDUAL COMMAND PROCEDURES
COMMON ROUTINES
GLOBAL DATA STRUCTURES
THE MONITOR MAINTAINS THE USER'S MACHINE STATE (REGISTERS) IN A
WORD ARRAY. THE REGISTERS ARE SAVED FROM THE USER'S STACK
AS PUSHED BY PLM86 INTERRUPT PROCEDURE.
POINTERS TO THE 50К-86 29920 ADDRESS SPACE ARE IMPLEMENTED WITH
РО/М-86 COMPILER
е /
/%
50К86 SERIAL МОМІТОЯ
POINTER STRUCTURES ALLOCATED AS 2 WORD STRUCTURES.
MONITOR: DO; /% BEGINNING OF MODULE %/
110200000 00 0 00 0 8 ваа ооо ооо ооо ооо ааа аа ва ва тегов ее т ааа ае RES
211020020000 50 0 120 0 0 00 аааавааааазавававаа авааанааваававаа аа ава ваа
GLOBAL DATA DECLARATIONS MODULE
PAGE =
THIS MODULE CONTAINS ALL THE GLOBAL DATA DECLARATIONS AND
LITERALS (EQUATES).
MODULE ORGAINIZATION
THE MODULE Т5 DIVIDED INTO 5 SECTIONS:
1. UTILITY SECTION
2. 1/0 SECTION
3. MEMORY ARGUMENTS SECTIONS
4. REGISTER SECTION
5. BOOT AND 8089 SECTION
./
/ + 102 0 та ве в еее тете ваа
е UTILITY SECTION е
наа навававоавава ва ааа /
DECLARE
INT$VECTOR(5)
DECLARE
MONITORSSTACKPTR WORD,
MONTTORS$STACKBASE WORD;
DECLARE
COPYRIGHT(*®) BYTE DATA (" (С) 1
DECLARE
POINTER;
GLOBAL FLAGS, VARIBLES, EQUATES
1/0 PORTS,MASKS,AND SPECIAL CHARS
STRUCTURES FOR POINTERS
USER REGISTER SAVE AREA
BOOTSTRAP AND 8089 DESCRIPTOR
/9 INTERRUPT VECTORS */
978 INTEL CORP');
BRKI$FLAG BYTE, /% TRUE ІР BREAK SET #/
BRKI$SAVE BYTE, и” INST BREAK SAVE #/
CHAR BYTE, /* ONE CHAR LOOK AHEAD */
CHECK$SUM BYTE, /% PAPER TAPE CHECKSUM %/
1 BYTE, /% INDEX %/
END$OFF WORD, /% END OFFSET ADDRESS %/
WORD$MODE BYTE, /% WORD MODE FLAG */
LAST$COMMAND BYTE; /9 LAST COMMAND SAVE %/
DECLARE
TRUE LITERALLY 'ОБЕН",
FALSE LITERALLY "ОООН",
BREAK$INST LITERALLY "ОССН?, /% BREAKPOINT INST %/
STEP$TRAP LITERALLY "0100Н", /% SS TRAP FLAG MASK */
USER$INITS$SP LITERALLY '100Н', 79 USER STACK INITIAL ?/
СОЗСОММАМО LITERALLY "2", /% GO COMMAND CODE #/
SS$COMMAND LITERALLY "3",
STANDARD$LEN LITERALLY "16"
МАХЗОЕЦАХ
DECLARE
/9 SINGLE STEP CODE ?/
У /% PAPER ТАРЕ DATA REC LEN %/
LITERALLY "10000"; /% DELAY FOR PAPER ТАРЕ %/
Е
‘JLAG 8Я144415241НОНЗН 135У8 415241ХМОНЗИ
“\Н14$41$2%$АНОИЯИӘ) LV
( аВОМ 035 "Жаном 330) 38П120815 4152
/и ОНОМ 41 З SO џ/ “431К174 Н1498415241ХНОНЗиИ
‘SLAG на | мне 81ХМОНЗИН G3SV8 |(3884ХНОНЗИ
“сила : иназлноизие) LY
(аном 035 ‘аном 330) 380100815 1988
/ж | 18104ХҮЗНЯ ь/ “34318104 314$ | ЯНЕ ЗАНОИЯЙ
“31184 Н14$%ОНУ$АНОИЯИ 03548 ЕОНУ ФЛ. WIN
“(514 608Ү 1НОНЗНӨ ) LY
(даном 93$ ‘аном 440) зипіопні5 ЕОНУ
/а £ ІКЗИПОНУ а/ ‘USLNIOd ніафюонувфхномзи
‘аном ніафіонувфхноняи G3SV8 | ОНУФОНОМФЛНОИЗИ
‘FLAG ULdSLOUV$SAYOWSW ЗСУВ LOUVSXYOWSW
“(ULdSLOUVSXYONSWA) LV
(аном 245 ‘аном 440) 3НП120815 1587
Ия | ІКЗИПОНУ ь/ “48415104 Н148| ОНУФАНОИЗИ
ЖҮЗІ ЗІ 1557.
# К011236 ЈАЗАПОНУ ХНОИЗИ
зоо као носа ооо
/и 32985 НО ЯКУ"Я «/ Ног, Х717783117 1859
/* 1333 3117 #/ ‘HYO, Х777483117 315%
/а НИПІЗН ЗОУІННУО «/. ‘НОО, 2Х77783117 4251
/ + ЧЈУЧ NVOS SWOL в/ > Н6Е, Х711783117 МУ2$$11М1$6Я
/ь 1003201 АЗУ г “34002КНЗ
дама 1337 '118-8 8 «/ “4НОО, Х77783117 ЗФОНФІЇКІЗЯХМ
/а 1808 VLVG «/ " ,Н8343430, Х717у983117 1804%уУ1У4%683
/« 1804 GNYWWOO/SNLYLS ь/ “4НҮЗ440, Х77у783117 1НОа 81 У1 с вх
И» Хадия 4934319 LIWX в/ НЕО ь 27743117 KQUXL$OIS
/з АСУЗН 4154 ЗАТЗЭЗН ь/ г„вго, Х7171783117 10НХМН95015
ги AOWSY 135 У1Уа #/ HOG., 411V% 841 104504015
/а КС 414 108 GNWD SV ANYS г/ “,н4г0, 117Ү8Н31117 МО$Н10$1626$01$
/а 330 “11 а/ г, Него, Х717783117 1М820%16268%015
/а За0й 5:29 e/ “.Н420, Х177843117 3009%1!528%015
/и GNYWWOOD 13534 ь/ 6590, А11УЕЗ111 1485348 5268015
/а 1804 10481 WiVd e/ ",н03330, ATIVYSLIA 1804%У1У0%01<
4
/а 1804 104М1 5ПЈУ15 ь/ 4Н23330. ХЛЛУНЗЈ17 LYUOd$LYLS$OIS
/а LYYSN 1528 «/
/пезававоввввововевовововово
. NOILOGS SNOILVYVIOSG 0/1
пваавнанивзвазазавањћава 81:86.
“(.,МЧО14НМЭХ5,) wWivd 3148 (6)4КН29015
“(,43424468:98 :8210,) УРУП 3118 (а) 1ТОСУ
“(05,215 цл SYOLINOW 9@-HGS.‘°HVO'HGO) Уу140 3118 (a )NONDIS$OIS
“(0*, 48.) УРУП 3148 (4)954 ЯҮЗнН8 4015
Ив и 8 9 1 е и /
“(HOO HOO НА: НО: HOO НОО Н90“НЯ 5) VIVA 3118 (6)МОМ91544Ж
Зоуа YOLINOW ТҮ1835 967
анупоза | ||
s...
3877230 | 01
ЗНҮТЭЗС 1 6
ЗНУЛОЗО | 8
....
4
s...
as калтайоо 98-и/1а
PL/M=86 COMPTLER SDK86 SERIAL MONITOR PAGE
MEMORY$USERSTACK$PTR POINTER,
USERSTACK STRUCTURE (OFF WORD, SEG WORD)
АТ (@MEMORY$SUSERSTACK$PTR),
MEMORY$USERSTACK BASED MEMORY$SUSERSTACK$PTR WORD;
/ + 2022010020000 00 гагаттеотт
9 REGISTER SECTION е
99998249488088682082408989080/
12 1 DECLARE
REG(#) ВҮТЕ DATA 79 REGISTER NAMES 9?/
('AXBXCXDXSPBPSIDICSDSSSESIPFL'),
КЕСЗТНОЕХ WORD,
REG$SAV(14) WORD, /® USER'S SAVED REGS ®/
REGSORD( ?) BYTE DATA
(7,6,1,3,2,0,9,11,12,8,137,
SP LITERALLY 'REG$SAV( 4)",
BP LITERALLY " ВЕСЗЗАУ( 5)",
CS LITERALLY 'REG$SAV( 8)",
DS LITERALLY 'REG$SAV( 9)",
ss LITERALLY 'REG$SAV(10)',
ES LITERALLY 'REG$SAV(11)',
LP LITERALLY 'REG$SAV(12)',
FL LITERALLY 'ЯЄСЗЗАУ( 13)";
/ т 2200202 0700 08 ваа аа за аа ве аа ааа аа аа а а аа
е BOOTSTRAP JUMP AND 8089 VECTOR ж
211133515112 PARSER RAE е /
/* THIS BOOT CONSISTS ОҒ А LONG JUMP TO THE BEGINNING OF THE MONITOR
АТ ЕЕОО„ХХХХ WHERE ХХХХ TS THE STARTING ADDRESS OFFSET (IP) AND
MUST BE DETERMINED AFTER EACH COMPILE. #/
13 1 DECLARE
START$ADDR LITERALLY "ООАВН?, /% STARTING ADDRESS %/
BOOT1( #) BYTE АТ (OFFFFOH) DATA (ОБАН), / LONG JUMP OPCODE */
BOOT2( š) WORD AT (OSFFFIH) DATA (STARTSADOR),
BOOT3( B) WORD АТ (OFFFF3H) DATA (ОРРООН); /% SEGMENT ADDRESS! #/
/а THIS TWO-WORD DATA IS A JUMP TO THE STARTING ADDRESS AND IS LOCATED
AT THE FIRST LOCATION OF ROM (NO OTHER DATA OR CONSTANT DECLARATIONS
MAY PRECEDE IT). THE JUMP IS ACTUALLY TO (ЅТААТ-АОЮОА \-4 SINCE THE
INSTRUCTION 15 A RELATIVE JUMP OF LENGTH 3. %/
14 1 DECLARE
BOOT4( #) WORD DATA (28990Н,5ТАЯТҘАООВ-4); /% МОР,ЈМР START=ADOR %/
/® THIS BLOCK OF ROM АТ FFFF6-FFFFA IS INITIALIZED FOR THE 3089
DEVICE AND POINTS TO A BLOCK OF КАМ АТ 9100H. ?/
15 1 DECLARE
BLOCK $8089 WORD АТ (OFFFF5H) DATA (093018',
BLOCK$8089$PTR POINTER АТ (ОРРЕЕЗН) DATA (0019048);
у ззасзазазазазоазавосавзваваозезае 1
9 FILL DECLARATIONS SECTION е
ооо зоо ЗУ
4
PL/M-86 COMPILER SDK86 SERIAL MONITOR PAGE
/% THESE DECLARATIONS ОБРТМЕ FILL CHARACTERS FOR ALL UNUSED
LOCATIONS IN THE ROM ADDRESS SPACE. ANY MODIFICATION TO THE CODE
| THAT CHANGES THE USED LOCATIONS IN THE ROM REQUIRES
- MODIFICATION OF THIS SECTION. #/
16 1 DECLARE
У F LITERALLY 'OFFH',
FILL1(*) BYTE АТ (OFFFDBH) DATA (
FILL2(*) BYTE АТ (OFFFEOH) DATA (
FILL3(#) BYTE AT (OFFFF5H) DATA (
(
Р Р.ФОВІ,
Е,Е,Е,Е,Е,Е,Е,Е,Е,Е,Е,Е,Е,Е,Е),
,
FILL4(#) BYTE АТ (OFFFFCH) РАТА Е
/а чаво нон нос нони ана ааа ана ааа ааа на аа на аа аа ана
08:08 85:55 55:88:80: 5 555255255 Ц 5 0 й 0 0 5: Л: 20 0: 00: 0 0 4 њи ни аа ка
COMMON PROCEDURES
ABSTRACT
THIS MODULE CONTAINS THOSE LOWER LEVEL PROCEDURES CALLED BY HIGHER
LEVEL ROUTINES.
MODULE ORGANIZATION
THIS MODULE IS DIVIDED INTO 4 SECTIONS AS FOLLOWS:
1. BASIC 1/0 SECTION
ñ SIO$CHAR$RDY INPUT CHARACTER READY
W SIO$CHECK$CONTROL$CHAR CHECK FOR CONTROL CHARACTER
SIO$OUT$CHAR OUTPUT CHARACTER
SIO$GET$CHAR INPUT A CHARACTER
510500Т5ВҮТЕ OUTPUT A BYTE IN HEX
STOSOUT$WORD OUTPUT A WORD IN HEX
STO$OUT$BLANK OUTPUT A SINGLE BLANK
SIO$OUT$STRING OUTPUT A STRING
STO$OUT$HEADER OUTPUT A PAPER TAPE HEADER
2. UTILITY ROUTINES SECTION
SIO$VALID$HEX TEST FOR VALID HEX CHAR
SIO$HEX CONVERT TO HEX FROM ASCII
SIO$VALID$REG$FIRST TEST FOR VALID REGISTER FIRST CHAR
SIO$VALID$REG TEST FOR VALID REGISTER NAME
SIO$CRLF OUTPUTS A CR AND LF
SIO$TEST$WORD$MODE TEST FOR А "ИМ" IN COMMAND
: 51055 САМЗВСАНК SCANS FOR OPTIONAL BLANK
3. ГЗСОМЕМТ EXPRESSION EVALUATION SECTION
SIO$GET$WORD GET AN WORD EXPRESSION
SIO$GET$ADDR GET AN ADDRESS EXPRESSION
, SIO$UPDATE$IP OPTIONAL UPDATE OF С5:1Р
Ж» 4% 4. PAPER ТАРЕ READ SECTION
SIO$READ$CHAR READ CHAR FROM TTY READER
SIO$READ$BYTE READ A BYTE
SIO$READ$WORD READ A WORD
5. INTERRUPT AND RESTORE/EXECUTE ROUTINES
SAVE$REGISTERS SAVES USER REGISTERS
RESTORESEXECUTE RESTORE MACHINE STATE AND EXEC
INTERRUPTI$ENTRY INTERRUPT ROUTINE FOR SINGLE STEP
РЬ/М-36 COMPILER 50К86 SERIAL MONITOR PAGE
го
гә гә
с FZ.) ла) wn ГО
ОУ гә гә (Q I Мо» =
м мг го
INTERRUPTISENTRY INTERRUPT ROUTINE FOR GO
INIT$INT$VECTOR INITIALIZES INTERRRUPT VECTORS
8 /
ААА ААА.
е ВАЅІС 1/0 ЗЕСТІОМ ы
ИТЕУ,
STO$CHAR$RDY:
/9 TESTS FOR INPUT CHARACTER PENDING BY READING THE STATUS PORT
AND MASKING WITH SIO$RXRDY( READ DATA READY). RETURNS TRUE ТЕ
NOT EMPTY(CHAR PENDING) AND FALSE IF NO CHAR PENDING #/
PROCEDURE BYTE;
IF (INPUT(SIO$STAT$PORT) AND SIO$RXRDY)=20 THEN RETURN FALSE;
RETURN TRUE;
END;
STO$CHECK$CONTROLSCHAR:
/% THIS ROUTINE CHECKS ТЕ A CONTROL CHARACTER HAS BEEN INPUT TO
THE SERIAL PORT. AFTER A CONTROLS IT WAITS FOR А CONTROL=-Q BEFORE
RETURNING 72 THE CALLER. A CONTROL=C CAUSES A JUMP TO THE ERROR
ROUTINE. 9/
PROCEDURE;
CHAR = ЇНРОТ(5105рАТАРОНТ) AND O7FH;
IF CHAR=13H THEN /% CONTROLES 2 4/
DO WHILE CHAR<>11H; 79 CONTROL=Q ë /
ТЕ SIO$CHAR$RDY THEN
00;
CHAR = INPUT(STO$DATA$PORT) AND O7FH;
ТЕ СНАН-03Н THEN SOTO ERROR;
END,
END;
ELSE те CHAR = 03H THEN GOTO ERROR;
END SLO$CHECK$CONTROLS$CHAR;
ЗТОЗОЦТЗСНАЯ:
/* THIS ROUTINE OUTPUTS THE INPUT PARAMETER TO THE USART OUTPUT
PORT WHEN USART 15 READY FOR OUTPUT (XMIT BUFFER EMPTY). #/
PROCEDURE(C);
DECLARE C BYTE;
ТЕ SIO$CHARS$SRDY THEN CALL SIO$CHECKS$CONTROLSCHAR;
DO WHILE (ІМРОТ(ЗІОЗЗТАТФРОВТ) AND SIO$TXRDY)=20;END;
OUTPUT(SIO$DATA$PORT) = С;
END;
SIO$GET$CHAR:
/а THIS ROUTINE INPUTS A CHARACTER FROM THE INPUT PORT AND RETIRNS
WITH ІТ IN THE GLOBAL ‘CHAR’. THE CHARACTER IS ECHOED TO THE
OUTPUT PORT IF PRINTABLE. %/
PROCEDURE;
DO WHILE (INPUT(SIO$STAT$PORT) AND STOSRXROY)=20;END;
CHAR = INPUT(SIOS$DATAS$PORT) AND ОТЕН;
IF CHAR>=ASBL THEN CALL 31932015СЧАВ(СНАВН!,
END;
STISOUTSBYTE:
/а THIS ROUTINE OUTPUTS THE SINGLE INPUT PARAMETER TO THE JSART
PL/M-86 COMPILER SDK86 SERIAL MONITOR PAGE
IN ASCII HEXADECIMAL FORMAT, #/
PROCEDURE(8);
52 2 DECLARE В BYTE;
23 2 CALL 5ТОФОЈТФСНАК(АЗСТТ(5НЕ(В,4) AND OFH));
54 2 CALL SIO$OUT$CHAR(ASCII(B AND OFH));
55 2 CHECK3SUM = CHECK$SUM - В;
56 2 END;
57 1 STO$SOUT$WORD:
/® THIS ROUTINE OUTPUTS THE INPUT PARAMETER АЗ 4 ASCII HEXADECIMAL
CHARACTERS TO THE USART OUTPUT PORT, %/
PROCEDURE(W);
58 2 DECLARE W WORD;
59 2 CALL STISIUTSBYTE(HISH(W));
60 2 CALL STISOUTSBYTE(LOW(W));
91 2 ЕМО;
52 1 ЗІОЗОУТЗВСАМХ:
/® THIS ROUTINE OUTPUTS ONE BLANK, %/
PROCEDURE;
63 2 CALL ЗТОЗОПТфСНАН( АЗВЬ);
БЦ 2 ЕНО;
65 1 SIO$OUT$STRINC:
/® OUTPUTS A STRING POINTED TO BY THE FIRST PARM. #/
PROCEDURE( PTR);
66 2 DECLARE PTR POINTER, STR BASED PTR (1) BYTE;
67 2 ї = 0;
68 2 DO WHILE STR(I)<>9;
69 3 CALL STISICTSOCRARL ТАТТУ:
70 2 L зо ж а
71 3 SND.:
72 2 ENG;
#5 1 SIOSOUTSHEADER:
/%4 THIS ROUTINE OUTPUTS THE PAPER TAPE HEADER CONSISTING ЈЕ ":"
FOLLOWED BY THE RECORD LENGTH, LOAD ADDRESS, AND THE RECORD TYPE.
IT INITIALIZES THE CHECKSUM TO ZERO. 9?/
PROCEDURE(LENGTH,LOAD$ADDR,REC$TYPE);
74 2 DECLARE ((ЕМОТН, ВЕСЗТУРЕ) ВҮТЕ, LOAD$ADDR WORD;
7% 2 CALL SIS$OUT$CHAR( 7:73:
76 2 СНЕСКЗ5ЏМ 2 2;
77 2 CALL STO$OUT$BYTE(LENGTH);
78 2 CALL SIOSOUT$WORD(LOADS$ADOR);
79 2 CALL STOSOUTSBYTE(RECSTYPE);
80 2 END;
81 1 51253251355ТТ:1ЇМО050Е1АҮ:
/® THIS DELAY ROUTINE ALLOWS THE ЈЅАЯТ SUFFICIENT 7142
TO SETTLE AFTER WRITE OPERATIONS. @/
PROCEDURE:
22 2 Т = SHR(OFFH,OFFH);
#3 2 2:33
узи наа каа каа ДАЛАДА АА,
ж ость ROUTINES S20 SON в
PL/M-86 COMPILER SDK86 SERIAL MONITOR PAGE
84
10%
105
MM ww А
гә ғә № гә
—
м г ка) мә №
-» fN Г лә КА ка) Го ГО
го
д023848843:33:0890:0898489354820:94248238/
SIO$VALID$HEX:
и” THIS ROUTINE TESTS ТЕ THE INPUT PARM IS A VALID ASCII HEX DIGIT
AND RETURNS TRUE AS THE VALUE OF THE PROCEDURE IF SO AND FALSE
ТЕ МОТ. #/
PROCEDURE (H) BYTE;
DECLARE H BYTE;
DO I=O ТО САЗТ(АЗСІІ):
ТЕ Н.:АЗСЇЇ(1) THEN RETURN TRUE;
END;
RETURN FALSE;
END;
SIO$HEX:
/% THIS ROUTINE CONVERTS THE INPUT PARM FROM АЗСТТ TO ITS BINARY
EQUIVALENT AND RETURNS IT AS THE VALUE OF THE PROCEDURE. NO CHECK
IS MADE FOR INPUT VALIDITY. */
PROCEDURE(C) WORD;
DECLARE C BYTE;
ТЕ С<='9' THEN RETURN DOUBLE(C-30H);
ELSE RETURN DOUBLE(C-37H);
END;
STO$SVALID$REG$FIRST:
/% THIS ROUTINE CHECKS ТЕ ‘CHAR’ IS A VALID FIRST LETTER ОҒ A REGISTER
NAME AND RETURNS TRUE AS THE VALUE OF THE PROCEDURE ТЕ 50, #/
PROCEDURE BYTE;
DO ї=0 TO 26 BY 2:
IF CHARSREG(I) THEN RETURN TRUE;
END;
RETURN FALSE;
END;
SIO$VALID$REG:
/а THIS ROUTINE CHECKS IF THE TWO INPUT PARMS TAKEN TOGETHER FORM
A VALID REGISTER NAME. IT SEARCHES THE REGISTER TABLE AND IF А
MATCH IS FOUND, THE GLOBAL "ВЕОЗТМОЕХ" IS SET TO THE INDEX OF THE
VALID REGISTER AND THE PROCEDURE RETURNS TRUE. IF NO MATCH THE
PROCEDURE RETURNS FALSE AND REG$SINDEX IS UNDEFINED. #/
PROCEDURE (C1,C2) BYTE;
DECLARE (C1,C2) BYTE;
DO REG$INDEX=0 ТО 13;
IF C1isREG(REG$INDEX#2) AND С2=ВЕС ( ВЕСЗТМОЕХ® 2+1) THEN
RETURN TRUE;
END;
RETURN FALSE;
END;
ЗТОЗСЯЦЕ:
/а THIS ROUTINE OUTPUTS A CR AND LF ТО THE OUTPUT PORT. "/
PROCEDURE;
CALL 510500Т5СНАН(А5СН),
CALL SIO$OUT$CHAR(ASLF);
END;
STO$TEST$WORDSMODE:
8
PL/M-86 COMPILER $036 SERIAL MONITOR
№“ (GQ fo www MN ГО ГЮ
—
гә ә ГӘ ГӘ
“Л МЛ МЛ хл Е ск £ 2 м.м ГОГ г Го
РР оо £ =
1-
/® THIS PROCEDURE TESTS FOR А "И" FOLLOWING THE COMMAND AND ТЕ 50
SETS THE FLAG 'WORDSMODE TO TRUE OR FALSE OTHERWISE. SCANS OFS
OPTIONAL BLANK FOLLOWING COMMAND. %/
PROCEDURE;
WORD$MODE = FALSE;
CALL 51050ЁТ5СНАВ,
IF СНАН- "И" THEN
DO;
WORD$MODE = TRUE;
CALL ЗТОЗСЕТ$СНАН;
END;
ТЕ CHAR=ASBL THEN
CALL SIO$GET$CHAR;
END;
SIO$SCAN$BLANK:
/* THIS ROUTINE IS CALLED AFTER A COMMAND LETTER TO SCAN OFF THE
OPTIONAL BLANK. 9/
PROCEDURE;
CALL STO$GET$CHAR;
IF CHAR=ASBL THEN
CALL SITO$GET$CHAR;
END;
/ озоном на нананааааваа ааа ава ааа
е ARGUMENT EXPRESSION EVALUATOR SECTION 5
ТҮЗІЗГІЗІЕЗ 232152235355 аа нан /
STO$GET$WORD:
/е THIS ROUTINE READS CHARS FROM THE INPUT PORT AND EVALUATES
AN EXPRESSION CONSISTING OF '+*-' AND OPERANDS OF HEX NUMBERS
AND REGISTER NAMES. "/
PROCEDURE WORD;
DECLARE (SAVE,W) WORD, (OPER,T) BYTE;
OPER = "+";
W з 0;
DO WHILE TRUE;
T = CHAR;
SAVE = 0;
IF SIO$VALID$REG$FIRST THEN
00;
CALL 5ТОЗОЕТФСНАК;
ТЕ SIO$VALID$REG(T,CHAR) THEN
DO;
SAVE = REG$SAV(REG$INDEX);
CALL SIO$GET$CHAR;
GOTO EVAL;
END;
ELSE
SAVE = SIO$HEX(T);
END;
ТЕ NOT(SIO$VALIDSHEX(T)) THEN СОТО ERROR;
DO WHILE SIO$VALID$HEX( CHAR);
SAVE = SHL(SAVE,4) + SLO$HEX( CHAR);
CALL SIO$GETS$CHAR;
END;
PL/M=-86 COMPILER SDK86 SERIAL MONITOR PAGE
157 3 EVAL: IF OPER='+' THEN
158 3 W = Я + SAVE;
ELSE
159 3 W = Я - SAVE;
160 3 IF CHAR=ASCR OR СНАЯ=':' OR СНАВз',"' THEN
161 3 RETURN W;
162 3 IF CHAR='+' OR CHAR=z='-' THEN
163 3 OPER = CHAR;
ELSE
164 3 СОТО ERROR;
165 3 CALL ЗІОЗСЕТЗСНАВ;
166 3 END;
167 2 END;
168 1 SIO$GET$ADDR:
/9 THIS ROUTINE ACCEPTS A VALID ADDRESS EXPRESSION CONSISTING
OF AN OPTIONAL <SEG>: AND AN DISPLACEMENT. #/
PROCEDURE( PTR, DEFAULTS$BASE) ;
169 2 DECLARE PTR POINTER, DEFAULTS$BASE WORD,
ARG BASED PTR STRUCTURE (OFF WORD, SEG WORD);
170 2 ARG.SEG = DEFAULTS$BASE;
171 2 ARG.OFF = SIO$GET$WORD;
172 2 IF CHAR=':' THEN
173 2 00;
174 3 CALL 5ТОФОЕТЗСНАК;
175 3 ARG.SEG з ARG.OFF;
176 3 ARG.OFF = SIO$GET$WORD;
177 3 IF CHAR=':' THEN GOTO ERROR;
179 3 END;
180 2 END;
181 1 ЗТОЗПРРАТЕЗТР:
/® THIS PROCEDURE IS CALLED BY SINGLE STEP AND GO ТО OUTPUT THE CURRENT
ІР AND INSTRUCTION BYTE AND OPEN THE ТР FOR INPUT. #/
PROCEDURE;
182 2 CALL SIO$OUTS$BLANK;
183 2 CALL SIO$OUTSWORD(IP);
184 2 CSIP.SEG з C3;
185 2 CSIP.OFF з IP;
186 2 CALL 510300Т5СНАВ("-"),
187 2 CALL SIO$OUT$BLANK;
188 2 CALL SIO$OUT$BYTE(MEMORY$CSIP);
189 2 CALL SIO$OUTS$BLANK;
190 2 CALL 5ТОЗОЕТЗСНАК;
191 2 IF CHAR<>',' AND CHAR<>ASCR THEN CALL ЗТОЗСЕТЗАОПОВ ( бСЗТР ,CS);
193 2 END;
упавааавананванавааа ваа ваа аа за не
, РАРЕЯ ТАРЕ READ SECTION bd
+210 022202 0020022 012012100102 ваваа ва ва /
19 4 1 SIO$SREAD$CHAR:
/% THIS PROCEDURE READS A BYTE FROM THE PAPER ТАРЕ READER OF THE TTY
BY ACTIVATING ОТН, SAMPLING DSR FOR THE START BIT, DEACTIVATING
DTR WHEN THE START BIT APPEARS, AND READING THE DATUM FROM THE
USART. TO PROVIDE A HOLD-OFF CAPABILITY FOR THE LOAD COMMAND
10
РО/Ме86 COMPILER SDK86 SERIAL MONITOR PAGE
195
196
197
198
199
200
226
227
228
229
230
231
232
ГО ГУ ñ ГУ № fN хл) Е Е с ҮА) 2.2 го Г го
—
MM № го го №
MM Г го
МА) ЧА) ка) Г № №
ONLY (МОТ INTENDED FOR ТТҮ РАРЕВ ТАРЕ) CONTROL-S WILL CAUSE THIS
ROUTINE ТО WAIT FOR A CORRESPONDING CONTROL=Q ТО BE READ BEFORE
CONTINUING. ®/
PROCEDURE BYTE;
DECLARE DELAY WORD;
LOOP:
OUTPUT(SIO$STAT$PORT) = 5125825 140ТНХОН; /% DTR ON "/
DELAY з Q;
DO WHILE (INPUT(SIO$STAT$PORT) AND SIO$DSRDY)20; /*WAIT STARTBIT#/
DELAY = DELAY + 1;
IF DELAY>=MAX$DELAY THEN
ро;
OUTPUT(SIO$STAT$PORT) = STO$8251$CMND; /% OTR OFF ?/
GOTO ERROR;
END;
END;
OUTPUT(SIO$STAT$PORT) = SIO$8251$CMND; /® DTR OFF ®/
DO WHILE (INPUT(SIO$STAT$PORT) AND SIO$RXRDY)=0;END; /* WAIT LOOP %/
CALL STO$CHECK$CONTROLS$CHAR;
ТЕ CHAR = 11H THEN GOTO LOOP; /% GET ANOTHER IF CTL-Q %/
RETURN CHAR;
END;
SIO$READ$BYTE:
/8 THIS ROUTINE READS A BYTE FROM THE PAPER TAPE READER. %/
PROCEDURE BYTE;
DECLARE T BYTE;
T = LOW( STOSHEX(STO$READ$CHAR));
T = ЗНІ(Т,Ц) + LOW(SIO$HEX(STO$READ$CHAR));
СНЕСУРЗИМ = CHECK$SUM + Т;
RETURN T;
END;
STO$READ$WORD:
ие THIS ROUTINE READS A WORD FROM THE PAPER TAPE READER AND RETURNS ІТ
AS THE VALUE OF THE PROCEDURE. %/
PROCEDURE WORD;
DECLARE T BYTE;
T = SIO$READ$BYTE;
RETURN SHL(DOUBLE(T),8) + DOUBLE(SIO$READS$BYTE);
END;
/ чево они оно ава аа оно ааа на вала аа
ы INTERRUPT AND RESTORE/EXECUTE SECTION Ы
22311555555 555555555553 555555532 |
SAVE$REGISTERS:
/* THIS ROUTINE IS USED TO SAVE THE STACKED USER'S REGISTERS IN THE
МОМТТОВ"5 SAVE AREA. %/
PROCEDURE; |
ВР = MEMORY$USERSTACK;
05ЕҢ5ТАСК.ОЕҒ = USERSTACK.OFF + Ц;
DO 1:50. TO 19: 79 POP REGISTERS OFF ОҒ STACK #/
REG$SAV(REG$ORD(I)) = MEMORYS$USERSTACK;
USERSTACK.OFF = USERSTACK.OFF + 2;
END;
11
PL/M-86 COMPILER
233
234
235
236
237
NN №
Мо Момо 2 хл) MN ГӘ
го Мо го мм м MN № № №
SDK86 SERIAL MONITOR
SS = USERSTACK.SEG;
SP = USERSTACK.OFF;
END;
RESTORESEXECUTE:
/9 THIS PROCEDURE RESTORES THE STATE OF THE USER MACHINE AND
PASSES CONTROL BACK TO THE USER PROGRAM. IT CONTAINS A
MACHINE LANGUAGE SUBROUTINE TO PERFORM THE POPPING OF THE
USER REGISTERS AND TO EXECUTE AN "ТНЕТ" TO TRANSFER CONTROL
TO THE USER'S PROGRAM. ®/
PROCEDURE;
DECLARE RESTORESEXECUTESCODE(*) BYTE DATA
(08ВН,0ЕСН, /% MOV BP,SP 9/
088Н,246Н,002Н, /% MOV АХ, /ВР/.РАВМ2 8 /
088Н,05ЕН,0ОЧН, /® MOV ВХ,/ВР/.РАВМІ %/
О8ЕН,Орон, /9 MOV SS,AX 9 /
08ВН,0ЕЗН, /% МОУ 5Р,ВХ ./
OSDH, /* POP BP ./
05ЕН, /% РОР 01 9 /
ОБЕН, ге POP 51 B /
058Н, 79 РОР ВХ 9
ОБАН, 79 POP рх 9 /
O59H, 79 POP СХ ”/
0588, 79 POP АХ ./
ОТЕН, 79 РОР 05 ® /
007Н, /9 РОР Е5 8 /
OCFH), /% ТАЕТ ./
КЕЗТОНЕЗЕХЕСИТЕЗСООЕЗРТН WORD DATA ( .RESTORESEXECUTES$CODE);
USERSTACK.SEG = SS;
USERSTACK.OFF = SP;
DO [20 TO 10; /% PUSH USER'S REGISTERS ONTO HIS STACK #/
USERSTACK.OFF = USERSTACK.OFF - 2;
MEMORYSUSERSTACK = REGS$SAV(REGS$ORD(10-I));
END;
USERSTACK.OFF = USERSTACK.OPF - 2;
MEMORYSUSERSTACK = BP;
CALL RESTORES$SEXECUTESCODES$SPTR(USERSTACK.OFF,USERSTACK.SEG);
END;
INTERRUPTISENTRY:
/% THIS PROCEDURE IS CALLED WHEN THE СРО IS INTERRUPTED BY EXECUTING
AN INSTRUCTION WITH THE TRAP BIT SET (SINGLE STEP). %/
PROCEDURE INTERRUPT 1;
USERSTACK.OFF = STACKPTR;
USERSTACK.SEG = STACKBASE;
STACKPTR = MONITORS$STACKPTR;
ЗТАСКВАЗЕ = MONITORSSTACKBASE;
CALL SAVESREGISTERS;
FL = FL AND (МОТ STEPSTRAP); /% CLEAR STEP FLAG %/
IF LASTSCOMMAND<>SS$COMMAND THEN /% CONTINUE IF МОТ SS %/
CALL RESTORESEXECUTE;
CALL STOSCRLF;
CALL STOSUPDATESTP;
ТЕ СНАВз"',' THEN
09:
/% CHANGE ТО МОМТТОВ"5 STACK #/
PAGE
PL/M=36 COMPILER SDK35 SERIAL MONITOR PAGE
261 3 ЇР = CSIP.OFF;
262 3 CS = CSTP.SEG;
263 3 FL = FL OR STEPS$TRAP; /* SET STEP FLAG ?/
264 3 CALL RESTORE$SEXECUTE;
265 3 END;
266 2 IF CHAR<>ASCR THEN СОТО ERROR;
268 2 GOTO NEXT$COMMAND;
269 2 END;
270 1 INTERRUPT3$SENTRY:
/9 THIS PROCEDURE TS CALLED WHEN THE CPU EXECUTES A ‘INT 3" INSTRUCTION.
THE MONITOR INSERTS THIS (OCCH) FOR A BREAKPOINT. ALSO AN EXTERNAL
INTERRUPT OR A USER SOFTWARE INTERRUPT MAY CAUSE THIS PROCEDURE TO BE
CALLED. ?/
PROCEDURE INTERRUPT 3;
271 2 USERSTACK.OFF = STACKPTR;
272 2 USERSTACK.SEG = STACKBASE;
273 2 ЗТАСКРТЯ = MONITORSSTACKPTR;
274 2 STACKBASE = MONITOR$STACKBASE;
279 2 CALL SAVE$REGISTERS;
276 2 CALL 5103СВЬР,
277 2 СОТО AFTERSINTERRUPT;
278 2 END;
279 1 INIT$INTSVECTOR:
/® THIS ROUTINE INITIALIZES AN INTERRRUPT VECTOR AS FOLLOWS: THE OFFSET
FROM THE ADDRESS OF "ТМТЗВОЏТТМЕ" CORRECTED BY THE APPROPRIATE
NUMBER OF BYTES FOR THE INTERRUPT PLM PROLOGUE. THE SEGMENT FROM THE
CURRENT CS REGISTER IS DETERMINED BY A MACHINE LANGUAGE CODED
SUBROUTINE. ®/
PROCEDURE( INT$VECTORS$PTR, INT$ROUTINESOFFSET) ;
280 2 DECLARE INT$VECTOR$PTR POINTER, INT$ROUTINE$SOFFSET WORD,
VECTOR BASED INT$VECTOR$PTR STRUCTURE (OFF WORD, SEG WORD),
CORRECTION LITERALLY "19Н", /% OFFSET FOR PROLOGUE #/
INIT$INT$VECTOR$CODE(*) BYTE DATA
(9558, /* PUSH BP 8 /
O8BH,OECH, /® MOV BP,SP е /
ОВСН , ОСВН, /% MOV АХ,С5 е /
ОСЧН,ОФЕН,ООЧН, /9 LES ВХ,/ВР/.РАНМ1 %/
026H,089H,007H, /® MOV ES:W/BX/,AX е /
0508, 79 POP ВР ./
0C2H,004H,000H), /% RET 4 8 /
INIT$INT$VECTOR$CODE$PTR WORD DATA (.INIT$INT$VECTOR$CODE);
281 2 CALL INIT$INT$VECTOR$CODE$PTR(@VECTOR.SEG); /% SEGMENT PORTION %/
282 2 VECTOR.OFF = INT$ROUTINE$OFFSET - CORRECTION; /9 OFFSET PORTION #/
283 г END;
/% 000 й 00: :0:ї її ї л 0 0 0: 0 0Ц 2 0: 2 0 вв ЛАД ДА ДА Л Є ААА,
ооо 00:00 2 40 2 024621: 5 002 000606: вз 88484. 3484885864 RRR ERR RRR Р Л Ч
COMMAND MODULE
ABSTRACT
PL/M-86 COMPILER
ҚА) ЧА) КАЈ КАЈ КАЈ АЈ ww ГӘ ҒӘ ҒӘ
~
гә гә гу № №
SDK86 SERIAL MONITOR
AND CALLED FROM THE OUTER BLOCK OF THE COMMAND DISPATCH LOOP.
MODULE ORGANIZATION
21:212:22:231::1:1:11:1::
THIS MODULE CONTAINS THE FOLLOWING SECTIONS:
1.
2»
./
COMMANDS SECTION
STO$GO GO
STOS$SSINGLESSTEP SINGLE STEP
ЗТОЗЕХАМЗМЕМ SUBSTITUTE MEMORY
SIO3EXAM$REG EXAMINE REGISTER
SIO$MOVE MOVE
STOSDISPLAY DISPLAY BYTES
STOSINPUT INPUT PORT
ЗТОЗОПТРИТ OUTPUT PORT
ЗТОЗМЯТТЕ WRITE DATA RECORDS
ЗТОЗНЕАО READ DATA RECORDS
COMMAND DISPATCH (OUTER BLOCK, MAIN PROGRAM LOOP)
МЕХТЗСОММАНО ОТЗРАТСН
ERROR ERROR ROUTINE
/ + 22202100 00 0 2 воа 002 009
е СОММАМО ЗЕСТІОМ ы
121111111111 1121 2У)
510300:
/9 IMPLEMENTS THE "00" COMMAND. THE USER MAY SPECIFY
ТР: РС AND AN OPTIONAL BREAKPOINT. ?/
PROCEDURE;
CALL ЗТОЗОРОАТЕЗТР;
IF CHAR=',' THEN
/9 BREAKPOINT 9?/
00;
CALL STO$GETSCHAR;
CALL SIO$GETS$ADDR(@BRK1,CSIP.SEG);
ТЕ CHAR<D>ASCR THEN GOTO ERROR;
BRKI$SAVE = МЕМОВУЗВЕК 1;
MEMORY$BRK1 = BREAK$INST;
IF МЕМОЯУЗВАК1<>ВЕЕАКЗТМЗТ THEN GOTO ERROR;
BRKI3FLAG = TRUE;
END;
ELSE /% NO BREAKPOINT ?/
IF CHAR<>ASCR THEN GOTO ERROR;
CALL SIOSCRLF;
з CSTP.OFF;
з CSIP.SEG;
FL = FL AND (МОТ STEPSTRAP);
L RESTORESEXECUTE;
SITOSSINGLES$STEP:
A NEW
/% CLEAR IF SET ?/
/® IMPLEMENTS THE SINGLE STEP COMMAND. DISPLAYS ІР AND THE
CURRENT INSTRUCTION ВТҮЕ. OPENS 5:19? FOR INPUT.
DEPRESSING
COMMA CAUSES THE MONITOR TO SINGLE STEP THE INSTRUCTION, AND
PERIOD TERMINATES THE COMMAND. %/
PROCEDURE;
PAGE
14
PL/M-86 COMPILER SDK86 SERIAL- MONITOR PAGE
307
308
310
311
312
313
314
319
316
317
318
319
321
322
323
324
325
326
327
328
329
331
332
333
334
336
337
338
339
381
352
343
344
346
347
348
350
351
392
353
354
355
356
357
358
— NN гу Јо гу го
WWWNNN ГО ГО
млм Е E £ O ы 2 КА) МА) КА)
—
fÑ КА) www Www 4 ЛА є
CALL SIO$UPDATESIP;
ТР СНАНС»"," THEN GOTO ERROR;
CSIP.OFF;
CSIP.SEG;
FL = FL OR ФТЕРЗТНАР;
CALL RESTORE$EXECUTE;
END;
Q
а
Син
ЗТОЗЕХАМ$ МЕМ:
/% IMPLEMENTS THE EXAMINE MEMORY COMMAND. %/
PROCEDURE;
DECLARE W WORD;
CALL SIO$TEST$WORD$MODE;
CALL SITO$GET$ADDR(@ARG1,CS);
ТЕ СНАЯ<>",!" THEN GOTO ERROR;
DO WHILE TRUE;
CALL SIO$OUT$BLANK;
IF WORD$MODE THEN
CALL SIO$OUT$WORD( MEMORY$WORDSARG1);
ELSE
CALL SIO$OUT$BYTE(MEMORY$ARG1);
CALL ФТОЗОЏТЗСНАА( "-");
CALL SIO$OUT$BLANK;
CALL SIO$GET$CHAR;
IF CHAR=ASCR THEN RETURN;
IF СНАВС»"," THEN
00;
W з ЭТО$ОБТ$ НОВО;
те (CHAR <> ",") AND (CHAR <> ASCR) THEN GOTO ERROR;
ТЕ wIROSMOSE THEN
00;
МЕМОВУЗИОНОЗАНОТ = W;
ТЕ MEMORY$WORD$ARG1<>W THEN GOTO ERROR;
END;
ELSE
ро:
МЕМОВІЗАВСЇ!: = LOW(W);
ТЕ MEMORY$ARG1<>LOW(W) THEN GOTO ERROR;
END;
END;
IF CHAR=ASCR THEN RETURN;
IF WORD$MODE THEN
ARG1.OFF = ARG1.OFF + 2;
ELSE
АВСТ,ОРЕ = ARG1.OFF + 1;
CALL SIO$CRLF;
CALL SIO$OUT$WORD(ARG1.OFF);
END;
END;
ЗІОФЕХАМЗВЕС:
/% IMPLEMENTS THE EXAMINE REGISTER COMMAND. SCANS FOR A VALID
REGISTER NAME AND DISPLAYS THE VALUE OF THAT REGISTER WHICH 15
OPTIONALLY OPENED FOR INPUT. COMMA INCREMENTS TO NEXT REGISTER
UNLESS ТТ IS "БЕ" WHICH TERMINATES AS DOES CR. %/
PROCEDURE;
DECLARE (Т,1) BYTE, SAVE WORD;
15
Р./М-85 COMPILER
359
360
361
362
363
364
365
Г МАЈ ЧАЈ КАЈ КА) МАЈ үл) ЕЕ E + J) ЈА) КАЈ КАЈ ЈА) КАЈ Г ГО Г Г ФӘ (Q ww 42 £ £ E ЕЕ RE а) ла) Г ОМ
—
fN IV WM го г № г го MW MW № №
50К86 SERIAL MONITOR PAGE
CALL SIO$SCAN$SBLANK;
ТЕ CHAR=ASCR THEN
00:
CALL STOSCRL?;
00 1-0 ТО 13:
CALL STO$OUTS$BLANK;
CALL SIOSOUT$CHAR(REG(I#2));
CALL ЗТОЗОЦТЗСНАЯ ( НЕС(1?2+1));
CALL ЗТОЗОЏТЗСНАА("г").
CALL STOSOUT$WORD( REGS$SAV(I));
ТЕ [26 THEN CALL SIOS$CRLF;
END;
RETURN;
END;
IF NOT(STO$SVALID$REG$FIRST) THEN GOTO ERROR;
T = CHAR;
CALL ЗІОЗСЕТУСНАЯ;
ТЕ NOT(SIO$VALID$REG(T,CHAR)) THEN GOTO ERROR;
I = REG$INDEX;
DO WHILE TRUE;
CALL ЗТОЗОЏТЗСНАА( "а"):
CALL ЗТОЗОПТЗИОНО ( НЕСЗЗАУ(Т));
CALL 510%00Т9СНАЯ("-");
CALL STO$OUTS$BLANK;
CALL ЗТОЗСЕТЗСНАЯ;
IF СНАН<>2"," AND CHAR<>ASCR THEN
00;
ЗАМЕ = SIO$GET$WORD;
IF (CHAR <> ",' ) AND (CHAR <> АСК) THEN GOTO ERROR;
REG$SAV(I) = SAVE;
END;
IF СНАН-АЗСН OR 1213 THEN RETURN;
141441
CALL SIO$CRLF;
CALL SIO$OUTSCHAR( НЕС(Т?2));
CALL STOSOUTSCHAR(REG(I#®241));
END;
END;
ЗТОЗМОУЕ :
/9 IMPLEMENTS THE MOVE COMMAND. ACCEPTS 3 ARGUMENTS AMD MOVES THE
BLOCK OF MEMORY SPECIFIED ВУ ARG1-ARG2 ТО АЯСЗ. ARG2<ARG1 OR THERE
IS A DIFFERENCE WHEN THE BYTE ІЗ READ BACK, THEN ERROR. ?/
PROCEDURE;
99Р:
CALL ЗТОЗЗСАМЗВГАНК ;
CALL ЗТОЗСЕТЗАООН ( ЗАНС1Т,СЗ); /а FIRST ARGUMENT #/
ТЕ СНАЯ<>"," THEN GOTO ERROR;
CALL SIOSGETSCHAR;
END$SOFF = STO$GETS$WORD; /® SECOND ARGUMENT 9
IF ENDSOFF<ARG1.0FF THEN GOTO ERROR;
IF СНАН<>"," THEN GOTO ERROR;
CALL SIO$GETSCHAR;
CALL SITOSGETSADOR( ЗААСЗ, CS); /® THIRD ARSUMENT #/
ТЕ CHAR<>ASCR THEN GOTO ERROR;
CALL З1032ВР:
МЕМОЧТЗАЛОЗ = MEMORYSARGI;
PL/M-86 COMPILER 50К86 SERIAL МОНТТОН РАЈЕ
419 2 ТЕ MEMORY$ARG3<>MEMORY$ARG1 THEN GOTO ERROR;
421 2 ТЕ АЯСТ.ОЄЄ = ENDSOFF THEN RETURN;
423 2 ARG1.OFF = ARGI.OFF + 1;
424 д ARG3.OFF = АНСОС3.0Є87 + 1;
425 2 0919 LOOP;
426 2 END;
427 1 STO$DISPLAY:
/* IMPLEMENTS THE DISPLAY BYTE COMMAND. IF CALLED WITH 1 PARM THEN
OUTPUTS A SINGLE BYTE. ТЕ CALLED WITH 2 PARMS THEN OUTPUTS THE RANGE
BETWEEN THE TWO ADDRESSES. ТЕ ОЕЕЗЕТ< ВЕСТЧ THEN OUTPUTS ONLY A SINGLE
BYTE. #/
PROCEDURE;
428 2 DECLARE T BYTE;
429 2 CALL ЗТОЗТЕЗТУИОНОЗМООЕ;
430 2 CALL SITO$GET$ADDR(8ARG1,CS);
431 2 ТЕ CHAR=ASCR THEN
432 2 END$OFF = ARG1.OFF;
ELSE
433 2 00;
434 3 ТЕ CHAR<>',' THEN GOTO ERROR;
435 3 CALL SIO$GET$CHAR;
437 3 ЕМОФОРЕ = SIO$GET$WORD;
438 3 ТЕ ЕМОЗОЕЕ < АВСТ.ОРР THEN GOTO ERROR;
449 3 ТЕ CHAR<>ASCR THEN GOTO ERROR;
442 3 END;
443 2 NEWLINE:
CALL SIO$CRLF;
445 г CALL SIO$OUT$WORD(ARG1.0FF);
445 2 LOOP: CALL SIO$OUT$BLANK; '
446 2 ТЕ WORD$MODE ТНЕМ
цц” 2 00;
48 3 CALL SIO$OUT$WORD(MEMORY$WORD$ARG1I);
49 3 ТЕ АВСТ.ОЄЄ = END$OFF THEN RETURN;
451 3 ARG1.OFF з ARG1.OFF + 1;
452 3 END;
ELSE
453 2 CALL SIO$OUT$BYTE(MEMORY$ARG1);
454 2 ТЕ ARG1.OFF>=END$OFF THEN RETURN;
456 2 ARG1.OFF = ARG1.0FF + 1;
457 д T = ARG1.OFF AND ОООЕН;
458 2 IF Т=0 ОВ (WORD$MODE AND T=1) THEN GOTO NEWLINE;
460 2 GOTO LOOP;
461 2 END;
462 1 ЗТОЗТНРУТ:
/® THIS ROUTINE IMPLEMENTS THE "ТЦРиТ" COMMAND, USER ЗРЕСТЕТЕЗ
A PORT AND THE DATUM OF THE PORT IS DISPLAYED. #/
PROCEDURE;
463 2 DECLARE PORT WORD;
464 2 CALL SIO$TEST$WORDSHODE;
465 2 PORT = STOISGET$SWORD;
455 2 L30P:
Le СНАВ<У*,' THšN ШОТ) ERROR:
453 2 GELL 3132 028ЫЕЁ:
469 2 Ге wYROSMODE THEN
472 2 TALL 313531754080(1440980(РЭНТ ҮҮ:
PL/M-86 COMPILER
SDK86 SERIAL MONITOR
OUTPUTS LEADING NULLS,
AND TRAILING NULLS. %/
, INDEX) WORD;
FOR 8980 MODE #/
ELSE
471 2 CALL 510900Т%ВТҮТЕ(ІМРУТ(РОВТ));
ц72 2 CALL STO$GETS$CHAR;
473 г ТЕ CHARSASCR THEN RETURN;
475 г GOTO LOOP;
476 2 END;
477 1 SIO$OUTPUT:
/® THIS ROUTINE IMPLEMENTS THE ‘OUTPUT’ COMMAND. THE USER SUPPLIED
DATUM IS OUTPUT TO THE SPECIFIED PORT. #/
PROCEDURE;
478 2 DECLARE (DATUM,PORT) WORD;
479 2 CALL SIO$TEST$wWORD$MODE;
430 2 PORT = SIO$GET$WORD;
481 2 ТЕ СНАВО»"',' THEN GOTO ERROR;
483 2 CALL ЗТОЗСЕТЗСНАЯ;
84 2 LOOP:
DATUM = SIO$GETS$WORD;
485 2 ТЕ CHAR=':' THEN GOTO ERROR;
487 2 ТЕ WORD$MODE THEN
438 2 OUTWORD(PORT) = DATUM;
ELSE
489 2 OUTPUT( PORT) = LOW( DATUM);
499 2 IF СНАВз"',' THEN
431 2 00;
ц92 3 CALL SIO$CRLF;
493 3 CALL 510400Т4СНАВ(!-"),
494 3 CALL 51290079В0АЯҚ;
2:5 3 CALL 512%СЕТ%СНАВ;
пає 3 IF CHAR <> ASCR THEN GOTO LOOP;
473 3 END;
499 2 END;
522 1 STO$wRITE:
/% IMPLEMENTS THE PAPER TAPE WRITE COMMAND.
EXTENDED ADDRESS RECORD (3086 ONLY), START ADDRESS RECORDS
(8086 ONLY), DATA RECORDS, EOF RECORD,
PROCEDURE;
591 2 DECLARE (5ТАНТЗВЕС ,МООЕЗд086) BYTE, (LEN
202 2 CALL ЗТОЗОЕТЗСНАЯ;
123 2 MODE$8086 = TRUE;
534 2 ТЕ СНАЯз'Х"' THEN /%* TEST
505 г 50;
596 3 MODE$3086 з FALSE;
997 3 CALL ЗІОЗСЕТУСНАЯ;
503 3 END;
25% 2 ТЕ CHAR=ASBL THEN CALL 510%СЕТЗСНАВ;
мт 2 CALL SIO$GET$ADOR(@ARG1I,CS);
572 2 ТЕ СНАВ<>"," THEN GOTO ERROR;
214 2 CALL ФТОЗЈЕТЗСНАВИ;
515 2 END$OFF z SIO$GET$WORD;
515 г ТЕ END$OFF<ARG1. OF? THEN GOTO ERROR;
<18 2 IF CHAR<>ASCR THEN
519 2 00;
520 3 START$REC з TRUE;
521 3 CALL SIO$GET$CHAR;
Sez 3 CALL STO$GET$ADDR(@ARG3,CS);
PAGE
14
г. /М=86 COMPILER
223
52
225
526
ЭЕ?
520
5 30
231
532
2239
534
535
536
537
538
5 39
540
241
542
543
№ № л лә лә м МА)
NNN о мого N м W КАЈ КАЈ Ка) КАЈ 42 EK E 42 ЕЕ ка) ГО ГО № Ww №
Мо г юм
г
LOOP:
SDK86 SERIAL MONITOR PAGE
END;
ELSE
DO;
START$REC = FALSE;
ARG3.OFF = 0;
END;
ТЕ CHAR<>ASCR THEN GOTO ERROR;
CALL SIO$CRLF;
DO 1-1 TO 60; 79 LEADING NULLS %/
CALL SIO$OUT$CHAR(0O);
END;
CALL SIO$CRLF;
IF MODE$3086 THEN
DO;
IF START$REC THEN
DO;
CALL SIO$OUT$HEADER(04,0,03); /% START ADDRESS RECORD #/
CALL SIO$OUT$WORD( ARG3.SEG);
CALL SIO$OUT$WORD(ARG3.0FF);
CALL 510%00Т%ВҮТЕ( CHECK$SUM);
CALL SIO$CRLF;
ARG3.OFF = 0;
END;
CALL SIO$OUT$HEADER(02,0,02); /% EXTENDED ADDRESS RECORD #/
CALL SITOSOUT$WORD( ARG1.SEG);
CALL SIOSOUTS$BYTE(CHECK$SUM) ;
CALL SIO$CRLF;
END; :
СЕМ з STANDARD$LEN; ие DATA RECORD #/
INDEX = END$OFF - ARG1.0FF;
IF INDEX<STANDARD$LEN THEN LEN = INDEX + 1;
CALL SIO$OUT$HEADER(LEN,ARG1.0FF,00);
DO 1-1 TO LEN;
CALL SIO$OUTS$BYTE(MEMORY$ARG1);
ARG1.OFF = ARGI.OFF + 1;
END;
CALL SIO$OUT$BYTE(CHECK$SUM);
CALL SIO$CRLF;
IF END$OFF<>ARG1.OFF-1 THEN GOTO LOOP;
CALL STO$OUT$HEADER(00,ARG3.0FF,01); /% EOF RECORD %/
CALL ЗТОЗОПТЗВУТЕ ( CHECK3SUM) ;
CALL SIO$CRLF;
00 1-1 то 60; /% TRAILING NULLS #/
CALL ЗТОЗОПТЗСНАН(О);
END;
END;
SIO$READ:
/% IMPLEMENTS THE READ PAPER ТАРЕ COMMAND. */
PROCEDURE;
DECLARE BIAS WORD, (REC$TYPE,LEN,I,T) BYTE, OFFSET WORD;
BIAS = 0; /* DEFAULT BIAS ®/
19
Р,/М-85 COMPILER SDK86 SERTAL MONITOR PAGE
013
614
915
616
617
518
613
ом м NNW ХАА АЈ 22 ГО ГО (Q ӘӘ. МО О А МОМ Го №
Го N а — -а — см
-. — --з —
- -ð -а
ARG1.SEG = 0; /* DEFAULT CS FOR 3080 FORMAT FILE #/
CALL STO$SCANSBLANK;
ТЕ CHAR<>ASCR THEN BIAS = SIO$GET$WORD;
ТЕ CHAR<>ASCR THEN СОТО ERROR;
CALL STIO$CRLF;
LOOP:
DO WHILE SIO$READSCHAR<>':';3END;
CHECK$SUM = О;
LEN = SIO$READ$BYTE;
OFFSET = ЗТО$АБАОЗ НОВО;
АВСТ.ОРР = OFFSET + BIAS;
RECSTYPE = ЗТОЗВЕАО$ВУТЕ;
ТЕ ВЕСЗТУРЕ=ОЗ THEN /% START ADDR ТУРЕ %/
00;
С5
ТР
END;
IF ВЕСЗТУРЕ=Ог THEN /8 EXTENDED ADDR ТҮРЕ #/
ARG1.SEG = STO$READ$WORD;
ТЕ REC$TYPE = 91 THEN /% БОР %/
ТЕ OFFSET <> 0 THEN ІР з OFFSET;
ТЕ REC$TYPE=00 THEN /9 DATA ТУРЕ #/
DO 121 TO LEN;
T,MEMORYSARG1 = 510%ПЕАО%ВҮТЕ;
IF MEMORY$ARG1<>T THEN GOTO ERROR;
ARG1.OFF = ARG1.OFF + 1;
END;
T = SIO$READSBYTE; /% FETCH CHECKSUM ®/
ТЕ CHECK$SUM<>0 THEN GOTO ERROR;
IF REC$TYPE<>01 AND LEN<>0 THEN GOTO LOOP;
CALL 510500Т5СНАВ(0), /% DELAY FOR LAST CR, LF SENT ®/
CALL 519300Т5СНАВ(0), /% BY INTELLEC 77
ЕНО;
SIO$SREAD$WORD;
SIO$READ$WORD;
/ + ага 1010 10 тонова аа ааа
и COMMAND DISPATCH MAIN PROGRAM LOOP ?
9:888:83982092328:482099242040883081:44442308842234084/
DISABLE;
ОПТРИТ ( КВЗЗТАТЗРОНТ )
OUTPUT(KBSSTATS$PORT)
OUTPUT(KBSSTAT$PORT)
DO 1:0 TO 7;
OUTPUT(KBSDATASPORT) = KB$SIGNON(I);
END;
КВЗІМІТУМООЕ;
KBSINIT$SCAN;
908; /% OUTPUT "8086" SIGNON BACKWARDS */
/9 THIS STRANGE SEQUENCE OF CODE Т5 USED TO GUARANTEE CORRECT USART
INITIALIZATION AFTER EITHER: 1) HARDWARE RESET (EXPECTING MODE)
2) SOFTWARE RESTART (EXPECTING COMMAND). #/
OUTPUT(SIO$STAT$PORT) = SIO$S251$RESET;
CALL 5198825185ЕТТСТНОЗОБСАТ;
ОПТРИТ ( ЗТОЗЗТАТЗРОЯТ) = 25H;
CALL 5103825 135ЕТТ! ТНОЗОЕГАТ;
з OUTPUT(SIOSSTAT$SPORT) = 5105325 14НЕЗЕТ ;
CALL STO$S2513SETTLUINGSOELAY ;
PL/M-36 COMPILER
625
627
628
629
639
631
632
633
634
635
636
637
638
639
562
663
564
=» — М № ә са са са
— Ә ӘМ ӘӘ {М А ГО Г) О А =
—
SDK86 SERIAL MONITOR PAGS 21
OUTPUT(SIO$STAT$PORT) = SIO0$3251$%$MODE;
CALL SIO$3251$SETTLING$DELAY;
OUTPUT(SIO$STAT$PORT) = SI0$3251$CMND;
CALL SIO$3251$SETTLING$DELAY; °
CALL 510%007%5ТВІМС( 951095128083;
/% INITIALIZE USER'S REGISTERS %/
65,55,05,Е5,ҒЬ,ІР з O;
ЗР = USER$INIT$SP;
/9 INITIALIZE INTERRUPT VECTORS #/
CALL INITS$INTS$VECTOR( @INT$VECTOR(1),.INTERRUPTISENTRY);
CALL INITS$INTS$VECTOR( @INT$VECTOR(2),. INTERRUPT3$ENTRY);
CALL INIT$INT$VECTOR( @INT$VECTOR(3),.INTERRUPT3SENTRY);
BRKI$FLAG = FALSE; 2.
MONITOR$STACKPTR = STACKPTR;
MONITOR$STACKBASE = STACKBASE;
NEXT$COMMAND:
/%
THIS IS THE PERPETUAL COMMAND LOOP WHICH DISPATCHES TO EACH
COMMAND WHICH IS A SEPARATED PROCEDURE. %/
CALL STO$CRLF;
CALL 510500Т5СНАВ(0),
CALL SIO$OUT$CHAR('.°);
CALL SIO$GET$CHAR;
00 1:0 TO LAST(SIO$CMND);
IF CHAR=SIO$CMND(L) THEN GOTO DISPATCH;
END;
GOTO ERROR; |
DISPATCH:
ERROR:
ла
LAST$COMMAND = I;
DO CASE I;
CALL SIO$EXAM$MEM;
CALL SIO$EXAM$REG;
CALL SIO$GO;
CALL SIO$SINGLE$STEP;
CALL SIO$MOVE;
CALL SIO$DISPLAY;
CALL SIO$INPUT;
CALL SIO$OUTPUT;
CALL SIO$READ;
CALL SIO$WRITE;
END;
GOTO NEXT$COMMAND;
THIS ROUTINE HANDLES ALL ERRORS DETECTED BY THE МОМІТОЯ AND
WILL OUTPUT THE ERROR PROMPT TO THE OUTPUT PORT. %/
CALL ЗТОЗОПТЗСНАН( "#");
GOTO NEXT$COMMAND;
AFTERSINTERRUPT:
.
THIS ROUTING 15 CALLED AFTER AN INTERRUPT ТО DISPLAY THE С
AND ЯЄЗТОЯЄ THE BREAKPOINTED INSTRUCTION. */
“Те
ГД
РІ/М-25 COMPILER 50535 SERIAL MONITOR
ТЕ BRKI$FLAG THEN
DO;
MEMORY$BRK1 = BRKI$SAVE;
BRKISFLAG = FALSE;
ТЕ ((ІР-1) AND 000ЕН)-(88К1,О0ЕР AND ОООЕН) AND
(ЭНЕ(ІР-1,43»С5)-( ЭНЕ(ВВК1.ОЕҒ,Ш 3 “ВЕК1.5ЕС) THEN
D9;
IP з IP ~ 1;
CALL SIO$OUT$š$STRING(ƏSIO$BREAK$WSG);
END;
END;
CALL SIO$OUT$CHAR('8');
CALL ЗТОЗОПТЗИОНО( СЗ);
CALL SIO$OUTSCHAR(':');
CALL STO$SOUTS$SWORD( ТР);
GOTO МЕХТЗСОММАМО;
~ Gy ut
с
МА -а
J. c .”
а N за ~ 3
tas y J а & АЈ Ёс -—
4
— а — „а — СО цд) АА хэ! №
слу «Зу OY че бо, te O.
«
л
чә
=
ЄМО МОМІТОЯ; /% END OF MODULE ®/
EOF
422005 INFORMATION:
CODE AREA SIZE QF DBH 40590
CONSTANT AREA SIZE = 0000H 00
VARIABLE AREA 3122 = 29738 1200
MAXIMUM STACK 5125 з 2942H 650
1211 LINES READ
0 PROGRAM 21829. 3:
END OF Р,/М-35 СОМ? АТТОН
х
SDK-86 SERIAL MONITOR
EXPANDED SOURCE LISTING
Р /М-86 COMPILER SDK86 SERIAL MONITOR PAGE 1
1515-11 PL/M-86 91.1 COMPILATION OF MODULE MONITOR
NO OBJECT MODULE REQUESTED
COMPILER INVOKED BY: PLM86 :£1:SERIAL.PLM LARGE OPTIMIZE(2) PAGEWIDTH(95) &
CODE XREF NOOBJECT PRINT(:F1:SERIAL.PRT)
$TITLE(*SDK86 SERIAL MONITOR’)
$NOINTVECTOR
/а пои ооо ооо о ваа звоно везао оа ваа аа 90 22218206
ооо ооо ооо сво ооо ос ооо ово нон ооо но 8 0.8 06
50К-86 MONITOR, V1.2
06 AUGUST 1979
(С) 1978 INTEL CORPORATION. ALL RIGHTS RESERVED. NO PART
OF THIS PROGRAM OR PUBLICATION MAY BE REPRODUCED, TRANSMITTED,
TRANSCRIBED, STORED IN A RETRIEVAL SYSTEM, OR TRANSLATED INTO ANY
LANGUAGE, IN ANY FORM OR BY ANY MEANS, ELECTRONIC, MECHANICAL,
MAGNETIC, OPTICAL, CHEMICAL, MANUAL OR OTHERWISE, WITHOUT THE PRIOR
WRITTEN PERMISSION OF INTEL CORPORATION, 3065 BOWERS AVENUE, SANTA
CLARA, CALIFORNIA, 95051.
ооо ооо ооо вв ваа ава аа ааа ааа аа вана аа ааа ова ааа ваа а ERS
ABSTRACT
THIS PROGRAM IS THE ROM BASED SERIAL MONITOR FOR THE 50К-86. ТТ
PROVIDES THE USER WITH A MODERATE LEVEL OF CAPABLILITY TO
EXAMINE/MODIFY MEMORY AND REGISTERS, CONTROL PROGRAM EXECUTION,
AND LOAD/SAVE PROGRAMS.
ENVIRONMENT
THE SDK SERIAL MONITOR COMMUNICATES WITH THE USER УТА AN INTERACTIVE
TERMINAL (TTY,CRT) ATTACHED TO THE SERLAL PORT.
PROGRAM ORGANIZATION
THE PROGRAM IS DIVIDED INTO 1 DATA AND 2 CODE MODULES:
1. DATA DECLARATION MODULE. GLOBAL DATA DECLARATIONS.
2. COMMON ROUTINES. LOWER LEVEL PROCEDURES
3. COMMAND MODULE. INDIVIDUAL COMMANDS AND OUTER BLOCK
CALLING GRAPH
>> СОММАМО DISPATCH MODULE (OUTER BLOCK)
INDIVIDUAL COMMAND PROCEDURES
COMMON ROUTINES
GLOBAL DATA STRUCTURES
THE MONITOR MAINTAINS THE USER'S MACHINE STATE (REGISTERS) IN А
WORD ARRAY. THE REGISTERS ARE SAVED FROM THE USER'S STACK
AS PUSHED BY PLM86 INTERRUPT PROCEDURE.
PL/M=-86 COMPILER
SDK86 SERIAL MONITOR PAGE
POINTERS TO THE 50К-46 29920 ADDRESS SPACE ARE IMPLEMENTED WITH
POINTER STRUCTURES ALLOCATED AS 2 WORD STRUCTURES.
»/
MONITOR:DO; /% BEGINNING OF MODULE #/
ла поборов ооо ооо иона ооо оо ооо о оно зоте
оно ооо оао 555555552525 5 555 2 ои 213114
GLOBAL DATA DECLARATIONS MODULE
ABSTRACT
THIS MODULE CONTAINS ALL THE GLOBAL DATA DECLARATIONS AND
LITERALS (EQUATES),
MODULE ORGANIZATION
2222222222:2222222222
THE MODULE IS DIVIDED INTO 5 SECTIONS:
1. UTILITY SECTION GLOBAL FLAGS, VARIBLES, EQUATES
2. 1/0 SECTION 1/0 PORTS,MASKS,AND SPECIAL CHARS
3. MEMORY ARGUMENTS SECTIONS STRUCTURES FOR POINTERS
4. REGISTER SECTION USER REGISTER SAVE AREA
5. BOOT AND 8089 SECTION BOOTSTRAP AND 8089 DESCRIPTOR
8 /
/ % 24 001 2 з0 10 10 ваа ааа аа 7.
. UTILITY SECTION *
тете рев авт ре гв рата /
2 1 DECLARE
INTSVECTOR(5) POINTER; /* INTERRUPT VECTORS #/
+“ DECLARE
MONITORSSTACKPTR WORD,
MONITORSSTACKBASE WORD;
ü | DECLARE
COPYRIGHT(®) ВҮТЕ DATA ("(С) 1978 INTEL CORP’);
5 4 DECLARE
BRK 1$FLAG BITE, /* TRUE ТР BREAK SET #/
BRK 1$SAVE BYTE, /* INST BREAK SAVE #/
CHAR BYTE, /% ONE CHAR LOOK AHEAD 9/
CHECK$SUM BYTE, /% PAPER TAPE CHECKSUM */
Т ВҮТЕ, /% INDEX */
ENDSOFF WORD, /* END OFFSET ADDRESS %/
WORD$MODE BYTE, /% WORD MODE FLAG */
LASTS3COMMAND BYTE; /% LAST COMMAND SAVE */
ó 1 DECLARE
TRUE LITERALLY ‘OFFH’,
FALSE LITERALLY ‘OOOH’,
BREAKSINST LITERALLY ‘CCH’, /% BREAKPOINT INST %/
ЗТЕРФТВАР LITERALLY '01008', /% SS TRAP FLAG MASK */
USER$INIT3$SP LITERALLY '100Н', /% USER STACK INITIAL */
GO$COMMAND LITERALLY "2", /% GO COMMAND CODES %/
SS$COMMAND LETERALLY "3", /% SINGLE STEP CODE #/
STANDARD$LEN LITERALLY "16", /8 PAPER TAPE DATA REC LEN */
MAXS$OELAY LITERALLY "10000"; /% DELAY FOR PAPER ТАРЕ #/
2
“ (нидафатсо лноияие) LW
- (даном DZS ‘аном 330) JYNLƏNYIS 8152
Из ОНОМ 41 5 52 ги “43185104 Н144415241МОНЗИ
“5118 81495: 864 1НОНЗН 03548 | ЯНВЗЛАНОИЯЙ
“(81491389 1МО0нНЗН0) iV
(ОНОМ DAS ‘AYOM 440) ZUNLƏNYIS туча
ѓа + ЗОН a7 “34315104 61461 ИНЕЗАНОИЗИ
SLAG YLdSLOUVSAYOWSW 03548 &ОНУ$АНОНЗИ
"«ніафронувфіномяне) LY
«сном DAS ‘аном 440) IYNLƏNULS ЕОНУ
/а Е ІКЗИПОЧНУ ал “43185104 Н14$%ЬОНУ$АНОНЗИ
“аном Н148 | ОНУЗАНОКЯЙ G3SV8 | ОНУЗОНОМФ АНОИЗИ
‘JLAG ULdFLOUVSAYOWSW CASVE | ОНУФАНОИЯЙ
""ніафронуфінонзив) LV
(даном 035 "ЯНОМ 330) ЯНП1ОПН1$ 19НУ
/а | ЈАЗАПОНУ ь/ ‘USLNIOd Н14$15НУ$АНОНЯН
7886868668080888948008048080008:800:!
. NOILORS ІКЗИПОНУ ХМОНЗИ
стагсевае та сс в ава 58:46: 52388218 ае
/а 30У46 НО ЯКУ"Я ь/ “.НО2д, Х717783117 18<у
ѓа 1333 3617 «/ "НУО, АЛ1ЛУНЗ3117 ‚ 8154
/а МЫПЇЯН ЗОУТННУЈ 4/ “ына0. 147171083117 о] АЈ
/ ж aly% NVOS SWOL e/ > Н6Е, ATIWHSLIN NVOS$LINI$EH
/а 1108001 АЗУ 2 “340023
‘XYLNS 1331 "11878 8 ги ‘HOO, Х77783117 ЗаОй 1 Т КТ ЕЯ
/. 1804 У1У0 гл “.Н893440, АЛПЛПҮНЗ11П ін04%уі1Уа%8»
/а 1804 GNYWKOD/SNLIVIS ь/ е НУЗ430, Х717783117 18084%1715%89
/и KidW3 H33308 LIWX +/ s „НО, AVIWUSLI1 XKGUXL$OIS
/а Ххаузн У1У4 ЗЛІЗОЗН ь/ ",нго, Х7171783117 XquxXxutoIS
а ХЧУЗН 135 9190 ь/ “Нов, ІЗЗУНЗЦІІ7 1484544015
/ь КО 810 108 ANRO SV IWYS e/ „Него, KVIVUSLIIT МОФН149:65204015
/ 330 4194 ми "ного, 117ҮнН3111 а8Н241:6528640165
/а З00И ОМАСУ а/ 8320. Х171783117 Зак | 28 015
/e ОКУИКОО 13558 e/ “.Н690. ІЗЗУН3111 136538%16208%016
/а 1808 10481 VIVO а/ " ,НО4430, Х77783117 1804%У1У0%016
/а 1804 LNdNI 501415 в/ г „Неа3 30, Х717783117 1808%1715%015
/и ІЧУЄП 1929 ь/
/008868064684884080089844888446084806084
О NOILOSS 6М011У8У7230 0/1
4088.81.68: 980 4 558150 408486 6... 108
“(,МНО10ННЭОХб,) Viva 3118 (ж) ОМИ2$015
"(,33408)68.995п5210,) ViVa зала (а) ТТОСУ
кс“ e ЦА “МО11МСИ 98-345.“НҮС“Н0а0) УУС зала (6)М5МО0М901548016
"(0", YE.) УРУС SLAG (se )OSWSHVSNESOIS
/ а и Б 9 "| С и а/
‘ноо ‘нос ‘Нз ‘Но HOO HOO H98'HgS) УШУП 3148 («) КОКОТС ВИ
зоуа YOLINOW "ЗУ18258 0693
анупоза
s...
Ззнуп0за 01
ЗНУЛОЗО Е
знулоза t
га...
.
.../
ЗНУЛО ЗС 4
ПЕ УЗ114н00 9р-н/ла
PL/M-86 COMPILER SDK36 SERIAL MONITOR PAG
МЕМОКУЗСЗТР BASED МЕМОНУЗСЗТРЗРТА BYTE,
МЕМОЯУ ОЗЕЯЗТАСК$ РТА POINTER,
USERSTACK STRUCTURE (OFF WORD, SEG WORD)
АТ (@MEMORYSUSERSTACK$PTR),
MEMORY$USERSTACK BASED MEMORY$USERSTACKSPTR WORD;
/ + 2022 220 0020 2010 009002022120
ы REGISTER SECTION в
паавававававававава га аа /
12 1 DECLARE
REG(#) BYTE DATA /* REGISTER NAMES 9?/
(*AXBXCXDXSPBPSIDICSDSSSESIPFL’),
REG$INDEX WORD,
REG$SAV(14) WORD, /9 USER’S SAVED REGS ?/
НЕСЗОВО( 3) BYTE DATA
(7,6,1,3,2,0,9,11,12,8,13),
SP LITERALLY ‘REG$SAV( Ц)’,
BP LITERALLY " НЕСЗЗАУ( 5)",
СЗ LITERALLY 'REG$SAV( 8)",
05 LITERALLY “ВЕСӚ5АУ( 9)",
55 LITERALLY " ВЕОЗЗАУ( 10)",
Е5 LITERALLY " ВЕСЗЗАУ( 11)",
LP LITERALLY 'REG$SAV(12)',
PL ` LITERALLY 'REG$SAV(13)';
/ + 1000000 000020 за ааа ааа ааа аа ааа аа аа за
, BOOTSTRAP JUMP AND 8089 VECTOR a
8889288988988988588988889988888988899898 /
/9 THIS BOOT CONSISTS OF A LONG JUMP ТО THE BEGINNING OF THE MONITOR
АТ ЕЕОО„ХХХХ WHERE ХХХХ IS THE STARTING ADDRESS OFFSET (ТР) AND
MUST BE DETERMINED AFTER EACH COMPILE. ?/
13 1 DECLARE
START$ADDR LITERALLY 'OOQA8H', /% STARTING ADDRESS %/
воот1(%) BYTE АТ (OFFFFOH) DATA (ОБАН), /% LONG JUMP OPCODE %/
BOOT2(*) WORD АТ (ОҒҒЕҒІН) DATA (START$ADDR),
BOOT 3( *) WORD АТ (OFFFF3H) DATA (OFFOOH); /% SEGMENT ADDRESS! ?/
/% THIS TWO-WORD DATA IS A JUMP TO THE STARTING ADDRESS AND IS LOCATED
AT THE FIRST LOCATION OF ROM (NO OTHER DATA OR CONSTANT DECLARATIONS
MAY PRECEDE ІТ). THE JUMP IS ACTUALLY ТО (5ТАНТ-АрОН!)!-4 SINCE THE
INSTRUCTION IS A RELATIVE JUMP OF LENGTH 3. ?/
14 1 DECLARE
800Т4(9) WORD DATA (OE990H,START$ADDR=-4); /% МОР,ЈМР START-ADDR */
/8 THIS BLOCK OF ROM АТ FFFF6-FFFFA IS INITIALIZED FOR THE 8089
DEVICE AND POINTS ТО A BLOCK OF RAM AT 0100H. #/
15 1 DECLARE
BLOCK$8089 WORD АТ (OFFFF6H) DATA (00018),
BLOCKS8089G$PTR POINTER АТ (OFFFF8H) DATA (00100Н);
оао очен ез ле іе аі ғ ж)
š FILL DECLARATIONS SECTION ?
оо зао ана а га ваа ааа аа за а 888 /
PL/M-86 COMPILER
29
26
27
28
29
31
32
33
36
37
38
02C1
02C3
0208
О2СА
02CD
02СҒ
0201
0204
0205
0207
O2DA
огрс
‘O2DE
02Е1
02E3
92Е8
02ЕА
02Ер
ОФЕЕ
02EF
02F0
02F2
02F5
02F7
02F9
SDK86 SERIAL MONITOR PAGE
7520 JNZ @2
DO WHILE CHAR<>11H; /% CONTROL=Q * /
: STATEMENT # 25
8121:
803E660011 CMP CHAR,11H
7423 JZ 85
ТЕ SIO$CHAR$RDY THEN
; STATEMENT й 26
E8D3FF CALL SITOCHARRDY
0008 АСЕ АС, 1
7362 JNB 8121
DO;
CHAR = INPUT(SIO$DATA$PORT) AND O7FH;
; STATEMENT # 28
BAFOFF MOV ОХ, ОЕЕЕОН
ЕС ТМ ОХ
2472 AND AL ТЕН
A26600 MOV CHAR, AL
IF CHAR=03H THEN GOTO ERROR;
; STATEMENT # 29
3с03 СМР AL, 3H
7503 JNZ $+5H
EX925FF JMP ERROR
END;
END;
; STATEMENT # 32
EBEO JMP @121
82:
ELSE IF CHAR = O3H THEN GOTO ERROR;
; STATEMENT # 33
803E660003 CMP СНАВ,ЗН
7503 JNZ $+5H
E919FF JMP ERROR
; STATEMENT # 35
85:
END SIO$CHECK$CONTROL$CHAR;
; STATEMENT # 35
5D POP BP
СЗ RET
SIOCHECKCONTROLCHAR ENDP
SIO$OUT$CHAR:
: STATEMENT # 36
/% THIS ROUTINE OUTPUTS THE INPUT PARAMETER TO THE USART OUTPUT
PORT WHEN USART IS READY FOR OUTPUT (XMIT BUFFER EMPTY). %/
SIOOUTCHAR PROC NEAR
55 PUSH BP
8BEC MOV ВР, ЭР
PROCEDURE(C);
DECLARE C BYTE;
IF SIO$CHAR$RDY THEN CALL SIO$CHECK$CONTROL$CHAR;
; STATEMENT # 38
E8ABFF CALL SIOCHARRDY
DOD8 RCR AL,1
7303 JNB 0123
; STATEMENT # 39
ЕВВТЕЕ CALL SIOCHECKCONTROLCHAR
24/М-35 COMPILER
40
42
43
4%
45
48
50
О2ЕС
02ҒҒ
0390
0302
0394
9397
ОЗОА
0308
930C
ОЗОЕ
0310
9312
0315
0316
0318
ОЗТА
0310
931Е
9320
0323
9325
9387
0328
0325
032F
SDK86 SERIAL MONITOR
PAGE
DO WHILE (INPUT(SIO$STAT$PORT) AND SIO$TXRDY)=z2); END;
; STATEMENT # 140
8123:
BAF2FF MOV DX,OFFF2H
EC IN DX
4801 TEST АБ, ІН
7ЦЕВ 42 9123
ОЧТРУТ(ЗІОФОАТАФРОВТ) з С;
; STATEMENT # 42
ВАРОРЕ MOV DX,OFFFOH
344604 MOV AL, ВР].С
EE OUT DX
END;
; STATEMENT # 43
5) POP BP
с20200 RET гн
SIOOUTCHAR ENDP
510%5ЕТ%СНАВ:
; STATEMENT # 44
/® THIS ROUTINE INPUTS A CHARACTER FROM THE INPUT PORT AND RETURNS
WITH IT IN THE GLOBAL "СНАА", THE CHARACTER IS ECHOED TO THE
OUTPUT PORT IF PRINTABLE. 9/
SIOGETCHAR PROC NEAR
55 РИЗН ВР
ВВЕС MOV ВР,5Р
PROCEDURE;
DO WHILE (INPUT(STOSSTAT$PORT) AND SIO$RXRDY)=0;END;
; STATEMENT # 45 š:
8125:
ВАЕ2ЕР MOV DX,OFFF2H
EC IN DX
A802 TEST AL,2H
7%4Е8 JZ 8125
CHAR = INPUT(SIO$DATA$PORT) AND O7FH;
; STATEMENT # 47
BAFOFF MOV DX,OFFFOH
EC IN DX
2Ц7Е AND AL,7FH
A26600 MOV CHAR,AL
ТЕ CHAR>=ASBL THEN CALL 510300Т545СНАЯ( CHAR);
; STATEMENT # 43
3020 СМР AL,20H
7207 JB 88
; STATEMENT # 49
ЕЕЗ56500 PUSH CHAR s 4
ЕВС1ЕЕ CALL STOOUTCHAR
83:
END;
: STATEMENT # 52
50 РОР BP
СЗ RET
ЗІОСЕТСНАЯ ENDP
STOSOUT$SBYTE:
; STATEMENT # š:
/® THIS ROUTINE OUTPUTS THE SINGLE [INPUT PARAHETER ТО THE USART
8
PL/M-86 COMPILER
5Ц
55
56
57
58
59
60
61
SDK86 SERIAL MONITOR
IN ASCII HEXADECIMAL FORMAT. %/
STOOUTBYTE
0330 55 PUSH
0331 8BEC MOV
PROCEDURE(B);
DECLARE B BYTE;
PROC NEAR
BP
BP,SP
CALL SIO$OUT$CHAR(ASCIT(SHR(B,4) AND OFH));
: STATEMENT # 53
Во, ВРЈ.В
CL,4H
BL,CL з
BL,OFH
ВН, ОН
СЗ: АЗСТТ BX]
SIOOUTCHAR
CALL SITO$OUT$CHAR(ASCII(B AND OFH));
; STATEMENT % 54
BL,£BP].B
BL,OFH
Вн, ОН
СЗ: АЗСТТГ BX]
SIOOUTCHAR
; STATEMENT # 55
AL,[BP].B
CHECKSUM, AL
; STATEMENT # 56
BP
2H
ENDP
0333 8A5E04 MOV
0336 B104 MOV
9338 D2EB SHR
033A 80ЕЗОҒ AND
0330 8700 MOV
ОЗЗЕ 2EFF773E PUSH
0343 E8A9FF CALL
0346 8A5E04 MOV
0349 80E30F AND
034С 8700 MOV
ОЗЧЕ 2EFF773E PUSH
0352 E89AFF CALL
CHECK$SUM = CHECK$SUM - 8;
0355 8A4604 MOV
0358 28066700 SUB
END;
035C 5D POP
0350 С20200 RET
51000ТВҮТЕ
SIO$OUT$WORD:
; STATEMENT # 57
/% THIS ROUTINE OUTPUTS THE INPUT PARAMETER AS ü ASCII HEXADECIMAL
CHARACTERS TO THE USART OUTPUT PORT. #/
STOOUTWORD
0360 55 PUSH
0361 8BEC MOV
PROCEDURE(W);
DECLARE W WORD;
PROC NEAR
BP
ВР,5Р
CALL SIO$OUT$BYTE(HIGH(W));
; STATEMENT # 59
АХ,ГВРЈ.И
AL, AH
AX . 1
SIOOUTBYTE
; STATEMENT # 60
АХ,ГВРЈ.И
АХ 4271
ЗТООПТВУТЕ
; ЗТАТЕМЕХТ й 61
ВР
0363 8B4604 МОУ
0366 88ЕО МОУ
0368 50 PUSH
0359 ЕВСЦЕЕ CALL
CALL SIO$OUT$BYTE(LOW(W));
036C 8B4604 MOV
036Е 50 PUSH
0370 ЕЗВОЕЕ CALL
END;
0373 5D POP
0374 с20200 RET
STOOUTWORD
2H
ENDP
PL/M-86 COMPILER SDK86 SERIAL MONITOR PA
62
«м
КАЈ
64
65
69
TO
(4
~
SIOSOUTS$BLANK:
; STATEMENT # 62
/9 THIS ROUTINE OUTPUTS ONE BLANK. 9/
STOOUTBLANK PROC NEAR
0377 55 PUSH BP
0378 8ВЕС MOV BP,SP
PROCEDURE;
CALL ЗТОЗОПТЗСНАН( АЗВЕ);
; STATEMENT # 53
ОЗТА 8020 MOV AL,20H
037С 50 PUSH AX 1
0370 E86FFF CALL 51000ТСНАН
ЕМР,
; STATEMENT 9 64
0383 5р РОР ВР
0381 C3 ВЕТ
STOOUTBLANK ENDP
SIOSOUTSSTRING:
; STATEMENT # 65
/% OUTPUTS A STRING POINTED TO BY THE FIRST PARM. 9/
STOOUTSTRING PROC NEAR
0382 55 PUSH BP
0383 8BEC MOV BP,SP
PROCEDURE( PTR);
DECLARE PTR POINTER, STR BASED PTR (1) BYTE;
L з 9%
; ЗТАТЕМЕМТ # 57
0385 с606680000 MOV Т, ОН
DO WHILE STR(I)<>0;
; STATEMENT # 58
06127:
038A 406890 MOV AL,I
0380 8400 MOV AH,OH
ОЗВЕ 89С6 MOV SI,AX
0391 C4SEO4 LES ВХ,(ВР).РТЯ
0394 26823800 СМР ES:(BX].STR(SIJ,0H
0393 7417 44 8128
CALL STOSOUT$CHAR(STR(I));
; STATEMENT # 69
039A 406800 MOV AGT
0390 8400 MOV AH,OH
039F 39С6 MOV 51,АХ
03А1 СЦБЕОЦ LES ВХ, (ВР].РТЯ
ОЗАЦ 26FF30 PUSH Е5:(18Х1.5Т8Я(51)
0347 Е8Ш5ҒЕ CALL SIOOUTCHAR
[L = [I 5 1;
; STATEMENT # 70
O3AA 8006680001 ADD І,ІН
END;
; STATEMENT 4 71
O3AF EBD9 JMP 9127
9128:
END;
; STATEMENT #72
1387 50 РОР ВР
Р'./М-35 COMPILER 50К35 SERIAL MONITOR
0382 020400 RET 4H
STOOUTSTRING ENDP
12: STOSOUT$SHEADER:
73
та
81
82
83
: STATEMENT # 73
/9 THIS ROUTINE OUTPUTS THE PAPER ТАРЕ HEADER CONSISTING OF ":"
FOLLOWED BY THE RECORD LENGTH, LOAD ADDRESS, AND THE RECORD TYPE.
IT INITIALIZES THE CHECKSUM TO ZERO. ?/
STOOUTHEADER PROC NEAR
0385 55 PUSH BP
0386 8BEC MOV BP,SP
PROCEDURE(LENGTH,LOAD$ADDR,REC$TYPE);
DECLARE (LENGTH,REC$TYPE) BYTE, LOAD$SADDR WORD;
CALL ЗТОЗОПТЗСНАН(":");
; STATEMENT # 75
0388 ВОЗА MOV AL, ЗАН
ОЗВА 50 PUSH AX ; 1
ОЗВВ E831FF CALL 51000ТСНАВ
СНЕСК$50М = 0;
; STATEMENT # 76
ОЗВЕ С606670000 MOV CHECKSUM, ОН
CALL ЗТОЗОПТЗВУТЕ ( LENGTH);
; STATEMENT # 77
ОЗСЗ FF7608 PUSH (BP].LENGTH; 1
0366 Е867ҒЕ CALL 51000ТВҮТЕ
CALL SIO$OUT$wORD(LOAD$ADDR);
; STATEMENT й 78
0309 FF7606 PUSH (BP].LOADADDR; 1 |
ОЗСС E891FF CALL SLOOUTWORD
CALL SIO$OUT$BYTE(REC$TYPE);
; STATEMENT # 79
ОЗСЕ FF7604 PUSH (BP).RECTYPE;. 1
0302 ЕВ5ВЕЕ CALL SIOOUTBYTE
END;
; STATEMENT # 80
0305 5D POP BP
0306 с20600 RET 6H
SIOOUTHEADER ENDP
SIO$8251$SETTLINGS$DELAY:
; STATEMENT # 31
/* THIS DELAY ROUTINE ALLOWS THE USART SUFFICIENT TIME
TO SETTLE AFTER WRITE OPERATIONS. ®/
SI108251SETTLINGDELAY PROC NEAR
03D9 55 PUSH BP
ОЗРА 8BEC MOV BP,SP
PROCEDURE;
I = SHR(OFFH,OFFH); .
; STATEMENT # 32
030С BOFF МОМ AL,OFFH
03DE BIFF MOV CL,OFFH
ОЗБО D253 SHR AL, CL
ОЗЕ2 А26800 MOV I,AL
END;
; STATEMENT й 33
0385 5D | РОР ВР
0356 63 НЕТ
РО/М-36 COMPILER SDK86 SERIAL MONTTOR
84
85
86
87
89
90
91
92
SI08251SETTLINGDELAY ENDP
/R88859898838888838.8288. ааа ваа ава ааа
ы UTILITY ROUTINES SECTION s
ооо со оно ваа ава на ва ваа ава /
1 SIO$VALID$HEX:
; STATEMENT # 84
/% THIS ROUTINE TESTS IF THE INPUT PARM IS А VALID ASCII HEX DIGIT
AND RETURNS TRUE AS THE VALUE OF THE PROCEDURE IF SO AND FALSE
IF NOT. #/
STOVALIDHEX PROC NEAR
ОЗЕТ 55 PUSH BP
03Е8 8BEC MOV BP,SP
PROCEDURE (H) BYTE;
2 DECLARE H BYTE;
2 DO 120 TO LAST( ASCII);
; STATEMENT
ОЗБА С506680000 MOV 1,0Н
8129:
ОЗЕР 803Е68000Ғ СМР І,ОРН
ОЗЕ 771A ЗА 8130
3 IF Н-А5СТІ(І) THEN RETURN TRUE;
; STATEMENT
03Е6 8A4604 MOV AL,(BP].H
0329 8A1E6800 MOV BL, I
03FD 8700 MOV ЗН, ОН
ОЗЕЕ СЕЗАЦТЗЕ СМР AL.CS: АЗСТТГ BX]
0403 7504 JNZ 89
; STATEMENT
0405 BOFF MOV AL,OFFH
0407 ЕВОЭ JMP 93
99:
3 END;
; STATEMENT
9409 8006680001 ADD I, ти
040Е 75рЕ JNZ 0129
8130:
2 RETURN FALSE;
; STATEMENT
0410 8000 MOV AL,OH
23:
0412 5р РОР ВР
0413 620200 RET 2H
2 END;
. ; STATEMENT
SIOVALIDHEX ENDP
t SIO$HEX:
86
87
88
89
30
91
; STATEMENT # 92
/9 THIS ROUTINE CONVERTS THE INPUT PARM FROM ASCII TO ITS BINARY
EQUIVALENT AND RETURNS IT AS THE VALUE OF THE PROCEDURE.
IS MADE FOR INPUT VALIDITY. #/
STOHEX PROC NEAR
0415 55 PUSH BP
0417 ЗВЕС MOV BP,SP
NO
CHECK
Р,/М-86 COMPILER
SDK86 SERIAL MONITOR
PROCEDURE(C) WORD;
DOUBLE(C-390H);
; STATEMENT # 34
[BP].C,39H
910
“ STATEMENT 8 95
AL, ВРЈ.С
AL,30H
өц
3761;
; STATEMENT # 95
AL. (8216
AL,37H
; STATEMENT # 98
ТР "СНАКА" IS A VALID FIRST
NAME AND RETURNS TRUE AS THE VALUE OF THE PROCEDURE IF SO.
PROC NEAR
BP
BP,SP
; STATEMENT # 99
Т, ОН
9133
I,2H
8132
I, ТАН
8132
ТЕ CHAR=REG(I) THEN RETURN TRUE;
93 г DECLARE С BYTE;
94 2 IF C<='9' THEN RETURN
0419 39780439 CMP
041D 7707 ЧА
ОЦТЕ ВАЦБОЦ MOV
0422 2030 508
0424 2805 ЈМР
910:
96 2 ELSE RETURN DOUBLE(C-
0426 8A4604 MOV
0429 2037 SUB
0%:
0%2В ВЦОО MOV
0420 50 РОР
042Е С20200 RET
97 2 ЕМО;
5ТОНЕХ ЕМОР
98 1 SIO$VALID$REG$FIRST:
/% THIS ROUTINE CHECKS
STOVALIDREGFIRST
0431 55 PUSH
0432 ВВЕС MOV
PROCEDURE BYTE;
99 2 DO [20 TO 26 BY 2;
0434 С606680000 MOV
0439 EBO7 JMP
0131:
0438 8006680002 ADD
0440 7214 JB
@133:
0442 803Е68001А CMP
0447 7713 JA
100 3
0449 406600 MOV
ОЦЦС 8A1E6800 MOV
0450 В790 MOV
0452 2ЕЗАШ758 СМР
0456 75ЕЗ JNZ
9458 BOFF MOV
045А 5D POP
O45B C3 RET
102 3 END;
8132:
103 2 RETURN FALSE;
045С 8000 MOV
; STATEMENT # 100
АС, С3$ : ВЕС (ВХ ]
8131
; ФТАТЕМЕМТ # 101
AL,OFFH
BP
; STATEMENT # 102
; STATEMENT # 103
АБ, ЭН
24:35
LETTER OF A REGISTER
PL/M-86 COMPILER SDK36 SERIAL MONITOR PAGE
O4SE 50 POP BP
О45Р СЗ НЕТ
104 2 ZND;
: STATEMENT # 104
STOVALIDREGFIRST ENDP
195 1 SIOSVALID$REG:
; STATEMENT # 105
/* THIS ROUTINE CHECKS IF THE TWO INPUT PARMS TAKEN TOGETHER FORM
A VALID REGISTER NAME. ТТ SEARCHES THE REGISTER TABLE AND IF А
MATCH IS FOUND, THE GLOBAL 'REG$INDEX' IS SET TO THE INDEX OF THE
VALID REGISTER AND THE PROCEDURE RETURNS TRUE. IF NO MATCH THE
PROCEDURE RETURNS FALSE AND НЕСЗТНОЕХ IS UNDEFINED. %/
STOVALIDREG PROC NEAR
0460 55 PUSH BP
0461 ЗВЕС MOV BP,SP
PROCEDURE (C1,C2) BYTE;
106 2 DECLARE (C1,C2) BYTE;
107 2 DO REG$INDEX=:0 TO 13;
; STATEMENT # 107
0463 с7062Е000000 MOV REGINDEX,0OH
8134:
0469 833E2E000D СМР REGINDEX,ODH
046Е 7731 JA @135
108 3 IF CisREG(REG$SINDEX®2) AND С2-НЕС( НЕСЗТНОЕХФ2 + 1) THEN
; STATEMENT # 108
0470 8В1Е2Е00 MOV ВХ, REGINDEX
0474 01ЕЗ SUL BX, 1
0476 8A4606 MOV ALC ВР]. 01
0479 2E3A4758 CMP AL,CS:REG( ВХ)
0470 BOFF MOV AL,OFFH
ОЦ7Е 7401 JZ $+3H
0481 чо INC AX
0482 ВАЦЕОЧ МОУ CL,{BP].C
0485 50 PUSH AX ‚1
0480 2E3A4F59 СМР CL,CS:REG(BX+1H]
ОЧЗА BOFF MOV AL,OFFH
O48C 7401 JZ $+3H
048Е Цо INC AX
ОЧВЕ 59 POP СХ ; 1
0490 22C1 AND АБЫ, СЫ
0492 2008 RCR AL, 1
0494 7304 JNB 813
109 3 RETURN TRUE;
; STATEMENT # 109
0496 BOF F MOV AL,OFFH
0498 2809 JMP 86
813:
110 3 ЕМО,
; STATEMENT 8 110
0494 83062E0001 ADD REGINDEX, 1H
O49F 73C8 JNB 0134
8135:
114 2 RETURN FALSE;
; STATEMENT # 111
ОЗА1 8000 MOV АБ, ОН
96:
14
PL/M-86 COMPILER
115
116
117
118
119
123
124
чл) №
SDK86 SERIAL MONITOR
O4A3 5D POP BP
ОЦАЦ C20400 RET 4H
END;
; STATEMENT # 112
SIOVALIDREG ENDP
SIO$CRLF:
; STATEMENT # 113
/* THIS ROUTINE OUTPUTS А CR AND LF TO THE OUTPUT PORT. #/
SIOCRLF PROC NEAR |
O4AT 55 PUSH BP
O4A8 8BEC MOV BP,SP
PROCEDURE;
CALL SIO$OUT$CHAR(ASCR);
; STATEMENT # 114
ОЧАА BOOD MOV AL,ODH
ОЧАС 50 PUSH AX ; 1
O4AD E83FFE CALL 51000ТСНАН
CALL SIO$OUT$CHAR(ASLF);
; STATEMENT # 115
0480 BOOA MOV AL,OAH
O4B2 50 PUSH AX ‚л
0483 E839FE CALL STOOUTCHAR
END;
: ; STATEMENT # 116
0486 50 РОР ВР
0487 СЗ RET
STOCRLF ENDP
SIO$TEST$WORD$MODE:
;
/9 THIS PROCEDURE TESTS FOR А "И" FOLLOWING THE COMMAND AND ТЕ 50
SETS THE FLAG 'WORD$MODE TO TRUE OR FALSE OTHERWISE.
STATEMENT # 117
OPTIONAL BLANK FOLLOWING COMMAND. "/
SIOTESTWORDMODE
0488 55 РЈ5Н
0489 8BEC MOV
PROCEDURE;
WORD$MODE = FALSE;
O4BB С606690000 MOV
CALL STO$GET$CHAR;
ОЧСО ES84CFE CALL
IF CHAR='W' THEN
04С3 803Е660057 СМР
04С8 7508 JNZ
DO;
WORD$MODE = TRUE;
PROC NEAR
BP
BP,SP
; STATEMENT # 118
НОКОМООЕ , ОН
; STATEMENT # 119
STOGETCHAR
: STATEMENT # 120
CHAR,57H
814
; STATEMENT # 122
WORDMODE,OFFH
: STATEMENT # 123
SIOGETCHAR
ОЧСА C6066900FF MOV
CALL SIO$GETS$CHAR;
ОЧСЕ E83DFE CALL
END;
314;
SCANS OFF
PAGE
15
PL/M=86 COMPILER
126
тет
128
131
133
134
135
м го
0402
0407
0409
O4DC
O4DD
O4DE
O4DF
O4E 1
ОЦЕЦ
04Е9
ОЦЕВ
ОЦЕЕ
ОЦЕЕ
ОЦЕО
ОЦЕТ
ОЦЕЗ
SDK86 SERIAL МОМІТОВ PAGE 16
IF CHAR=ASBL THEN
; STATEMENT # 125 е
803Е660020 СМР CHAR,20H
7503 JNZ 815
CALL ЗТОЗСЕТЗСНАН:
; STATEMENT # 126 й
E833FE CALL SIOGETCHAR
815:
END;
; STATEMENT # 127
5D POP BP
СЗ RET |
STOTESTWORDMODE ENDP \
STOSSCAN$BLANK:
; STATEMENT # 128
и? THIS ROUTINE IS CALLED AFTER A COMMAND LETTER ТО SCAN OFF THE
OPTIONAL BLANK. */
STOSCANBLANK PROC NEAR
55 PUSH BP
8BEC MOV BP,SP
PROCEDURE;
CALL ЗТОЗСЕТЗСНАН;
; STATEMENT # 129
E82BFE CALL ЗІОСЕТСНАВ
ТЕ CHAR=ASBL THEN .-
; STATEMENT # 130 | h.
803Е660020 СМР CHAR,20H <?
7503 JNZ 816 ”
CALL 510%С6ЕТ%СНАВ;
; STATEMENT # 131
E821FE CALL SIOGETCHAR
016:
ЕНО;
; STATEMENT # 132
50 РОР ВР
СЗ RET
SIOSCANBLANK ENDP
92990 0 оо оо нав оо ооо ооо воа ва ва ва ва ваа аа
,. ARGUMENT EXPRESSION EVALUATOR SECTION %
ооо ооо аа аа оа вола аа аа ааа ав ааа ааа аа аа ва /
SIO$GET$WORD:
; STATEMENT # 133
/% THIS ROUTINE READS CHARS FROM THE INPUT PORT AND EVALUATES
AN EXPRESSION CONSISTING OF '+-' AND OPERANDS OF HEX NUMBERS ы
AND REGISTER NAMES. %/
SIOGETWORD PROC NEAR
55 РОЗН ВР
8BEC MOV BP,SP
PROCEDURE WORD;
DECLARE (SAVE,W) WORD, (OPER,T) BYTE;
OPER = "+";
; STATEMENT # 135
с606680028 MOV OPER, 2ВЕ
PL/M-86 COMPILER
SDK86 SERIAL MONITOR
136 2
ОЦЕВ
137 2
138 3
O4FE
0501
139 3
0504
140 3
0504
0500
050Е
141 3
142 4
0511
143 4
0514
0518
051C
051Е
0521
144 ц
145 5
0523
0527
0529
052С
146 5
052Р
147 5
0532
0537
0539
053С
0540
148 5
149 4
0542
0546
0549
150
Ч з 0;
: STATEMENT
C7064E000000 MOV м, ОН
DO WHILE TRUE;
: STATEMENT
8136:
Т = СНАВ;
; STATEMENT
406600 MOV AL,CHAR
А26СОО MOV T,AL
SAVE = 0; |
; ЗТАТЕМЕНТ
C7064C000000 MOV SAVE, ОН
IF SIO$VALID$REG$FIRST THEN
; STATEMENT
ЕВ2ЦЕЕ CALL SIOVALIDREGFIRST
0008 RCR AL,1
733B JNB 017
DO;
CALL SIO$GETS$CHAR;
; STATEMENT
ЕВЕВЕО CALL SIOGETCHAR
ТЕ SIO$VALID$REG(T,CHAR) THEN
: STATEMENT
FF366C00 PUSH Т : 1
ЕЕЗ66600 РОЗН СНАВ : 2
ЕВЧТЕР CALL SIOVALIDREG
2008 RCR AL, 1
731F JNB 818
DO;
SAVE = REG$SAV(REG$INDEX);
; STATEMENT
8B1E2E00 MOV BX, REGINDEX
D1E3 SHL BX, 1
8B4730 MOV АХ, НЕСЗАУГ BX]
АЗЦСОО MOV SAVE, АХ
CALL SIO$GET$CHAR;
; STATEMENT
E8DDFD CALL SIOGETCHAR
GOTO EVAL;
; STATEMENT
07:
803E6B002B CMP OPER, 2ВН
7548 JNZ EVAL
A14C00 MOV AX,SAVE
01064E00 ADD М, АХ
EB46 JMP @22
END;
; STATEMENT
018:
ELSE
SAVE = SIO$HEX(T);
; STATEMENT
FF 366C00 PUSH Т ; 1
E8CDFE CALL SIOHEX
A34C00 MOV SAVE, АХ
END;
136
127
139
140
146
147
148
149
РЬ/М-86 COMPILER
SDK86 SERIAL MONITOR
#17:
151 3 ТЕ NOT(SIO$VALID$HEX(T)) THEN GOTO ERROR;
; STATEMENT # 151
054С FF366C00 PUSH т ° 4
0550 ES894FE CALL SIOVALIDHEX
0553 2600 NOT AL
0555 2008 RCR AL, 1
0557 7303 JNB $+5H
0559 ЕЭААЕС ЈМР ERROR
153 3 DO WHILE SIO$VALID$HEX(CHAR);
; STATEMENT # 153
0138:
055С FF366600 РОЗН CHAR » 4
0560 ES884FE CALL SIOVALIDHEX
0563 0008 АСА AL, 1
0565 73CB JNB 87
154 4 SAVE з SHL( SAVE, Ц) + SIO$HEX(CHAR);
: STATEMENT # 154
0567 A14C00 MOV АХ, SAVE
056A B104 MOV CL, ЗН
056C ОЗЕО SHL АХ, CL
0568 50 PUSH AX ; 1
0567 FF366600 PUSH CHAR $
0573 ЕЗАОРЕ CALL ЗІОНЕХ
0576 59 РОР СХ 5-3
0577 03С1 ADD AX,CX
0579 АЗ%С00 MOV SAVE,AX
155 4 CALL SIO$GETSCHAR;
; STATEMENT # 155
057С E890FD CALL ЗТОСЕТСНАЯ
156 4 END;
; STATEMENT # 156
057Р EBDB JMP 8138
157 3 EVAL: ТЕ OPER='+’ THEN
; STATEMENT # 157
EVAL:
158 3 Ч = W + SAVE;
ELSE
159 3 W = Я - SAVE;
; STATEMENT # 159
0581 А1%С00 MOV AX,SAVE
0584 29064E00 SUB М, АХ
822:
160 3 ТЕ CHAR=sASCR OR CHAR=':° ОД СНАА-"," THEN
; STATEMENT # 160
0588 406600 MOV AL,CHAR
0588 3С00 CMP AL,ODH
0580 BOFF MOV AL,OFFH
058Е 7401 42 $+3H
0591 40 INC AX
0592 50 РЈ5Н АХ ; 1
0593 803E66003A CMP CHAR, ЗАН
0598 BOFF MOV AL,OFFH
059A 7401 JZ $+3H
059 С 10 INC AX
0590 59 РОР CX ; 1
0592 ОАС1 OR AL, СТ,
PAGE
18
PL/M-36 COMPILER SDK86 SERTAL MONITOR РАЈЕ
0540 5) PUSH АХ . 1
0541 8)3Е66002С СМР СНАВ,2СН
05А6 ВЈЕРЕ MOV AL,OFFH
0548 7401 JZ $+3H
OSAA 4) INC AX
ОБАВ 5) РОР Cx . 1
05АС OAC1 ОВ AL,CL
OSAE 0205 RCR AL, 1
0580 7305 JNB 823
151 3 RETURN Ч,
; STATEMENT # 161
05B2 A14500 MOV АХ, И
0585 50 РОР ВР
0586 C3 RET
823:
162 3 ТЕ СНАЕ2'+' OR СНАВ-" -" THEN
; STATEMENT # 162
0587 823566002Вв СМР СНАВ,2ВН
05ВС ВОЕГг МОУ AL,OFFH
OSBE 7401 JZ $+3H
05С0 4) INC АХ
05С1 59 PUSH AX 5-3
0502 8933:660020 САР CHAR, 2рн
05С7 ВОЕЕ MOV AL,OFFH
05С9 7401 92 $+3Н
05СВ 40 ІМС АХ
05СС 53 РОР CX ; 1
05СО OAC! ОВ АС, CL
ОБСЕ рора АСВ АС, 1
0501 7203 УВ $+5Н
0503 Е930ЕС ЈМР ERROR
163 3 OPER = CHAR;
; STATEMENT й 153
05D6 AQ6600 MOV AL,CHAR
0509 126800 MOV OPER, AL
ELSE
164 3 GOTO ERROR;
165 3 CALL SIO$GETS$CHAR;
; STATEMENT # 165
05DC ЕЗЗОЕО CALL SIOGETCHAR
166 3 END;
; STATEMENT # 166
ОБОЕ ЕОТСЕЕ ЈМР 9136
8137:
167 2 END;
; STATEMENT # 167
05Е2 50 РОР ВР
0523 СЗ ВЕТ
STOGETWORD ENDP
168 1 SIO$GET$ADDR:
: STATEMENT # 158
из THIS ROUTINE ACCEPTS A VALID ADDRESS EXPRESSION CONSISTING
OF AN OPTIONAL 4560»: AND AN DISPLACEMENT, %/
STOGETADDR PROC NEAR
05ЕШ 55 PUSH BP
0555 ВВЕС МОУ ВР, ЗР
19
199
170
172
174
175
го
го
го
0567
ОБЕА
05Ер
09521
255
05F7
05ҒА
05FF
0601
0604
0607
O60A
05ЈЕ
0511
1614
9617
9515
1915
0621
9622
9625
2025
9628
50535 SERTAL МОХІТОЯ
PRICESOURE( PTR, DEFAULTS$SSASE);
DECLARE PTR POINTER,
DEC AULTS$BASE WORD,
ARS BASED PTR STRUCTURE (OFF WORD, SEG WORD);
ARG.SEG =
8B4604 MOV
045206 Les
26894792 MOV
DECAULTSBASE;
: STATEMENT
АХ, Вр]. DEFAULTBASE
ВХ, 5P].PTR
$3: АЯСГВХ+2Н],АХ
ARI з 214344 анти;
; STATEMEUT
32025 CALL STIGTTWORD
(45:06 „Ба BX," 3P].PTR
268327 MOV 8Е5:42278Х1|,АХ
ТЕ CHAR=':' THEN
‚ : STATEMENT
301556333А СМР CHAR, ЗАЗ
7529 JNZ 325
92;
CALL SID2šGET$CHAR;
; STATEMENT
ESOBFD CALL STOGETCHAR
ARG.SES з АЙйЙО.О7У;
; STATEMENT
04535936 455 ВХ, ВР).РТА
258807 MOV AX, ES: ARG( BX)
20894702 MOV SS:ARG( ВХ+2Н] ‚АХ
ARG.OFF = ЭГОЗСЕТЗ МОВО;
; STATEMENT
ЕЗОЕЕЕ CALL STOGETWORD
01455326 Les ВХ, ВР1|.РТЯ
268907 MOV ES: АНСГВХ |, АХ
ТЕ СНАН-!:" THEN СОТО ERROR;
; STATEMENT
823%#5°203A СМ? CHAR, ЗАЧ
7523 JNZ $+5Н
ЕЗЕ5ЕВ Јмр ERROR
; STATEMENT
END;
326:
END;
; STATEMENT
50 РО? ЗР
020600 RET 5H
STOGETADDR ЕЧОР
STISUPOATESTP:
/9 THIS PROCEDURE 15 CALLED ЗУ SINGLE
; STATEMENT
51252
ІР AND INSTRUCTION 3175 AND JPEN THE ЇР
STIUPDATETP
59 PUSH
ЗВЕС MOV
PROCEDURE;
САС. STISOUTSILANS ;
ES4CFD CALL
PROC NEAR
BP
Sf, SP
$ STATEMENT
STOOUTBLANX
CALL STOSOUTSWORD( TP);
# 179
9 171
# 172
8 175
2 178
2 139
2 131
AND. SO T2 OUTPUT THE
FOR INPUT., %/
"ЧЛ Ret
20
PL/M=86 COMPILER SDK86 SERIAL MONITOR
; STATEMENT й 183
0628 FF364800 PUSH REGSAV+18H; 1
O62F E82EFD CALL SILOOUTWORD
184 2 CSIP.SEG = CS;
; STATEMENT # 184
0632 A14000 MOV AX, REGSAV+10H
0635 А32800 MOV CSIP+2H,AX
185 2 CSIP.OFF = IP;
“ STATEMENT # 185
0638 А14800 MOV AX, REGSAV+18H
0638 А32600 MOV CSIP, АХ
186 2 CALL SIO$OUT$CHAR('-');
> STATEMENT # 186.
063E 8020 MOV AL,2DH
0640 50 PUSH AX 4:24
0641 ЕЗАВЕС CALL 51000ТСНАВ
187 2 CALL SIO$OUT$BLANK;
; STATEMENT % 187
0644 E830FD CALL SIOOUTBLANK
183 2 CALL SLO$OUTS$BYTE(MEMORY$CSIP);
; STATEMENT # 188
0647 C41E2600 LES ВХ, МЕМОВУСЗТРРТЯ
0648 26FF37 PUSH ES:MEMORYCSIP([ BX]
0648 E8DFFC CALL 51000ТВҮТЕ
189 2 CALL SIO$OUT$BLANK;
; STATEMENT # 189
0651 £€823FD CALL SIOOUTBLANK
199 2 CALL SIO$GET$CHAR;
; STATEMENT # 190
0654 E8B8FC CALL SIOGETCHAR
191 2 IF CHAR<>',' AND CHAR<>ASCR THEN CALL SIO$GET$ADDR(@CSIP,CS);
; STATEMENT # 191
0657 803Е66002С CMP CHAR, 2CH
065С BOFF MOV AL,OFFH
065Е 7501 JNZ $+3H
0660 40 INC AX
0661 50 PUSH AX ; 1
0662 803E66000D СМР СНАВ, Орн
0667 ВОЕҒ MOV AL,OFFH
0669 7501 JNZ $+3H
0668 10 ІМС АХ
066C 59 РОР CX 5-1
066D 22С1 AND ALCL
066Е 0008 RCR AL,1
0671 7300 JNB 028
; STATEMENT # 192
0673 80062600 СЕА АХ, СЗТР
0677 1E РИЗН 05 ; 1
0678 50 PUSH АХ : 2
0679 FF364000 PUSH REGSAV+10H; 3
0670 ES864FF CALL SIOGETADDR
828
193 2 END;
; STATEMENT # 193
0680 5D POP BP
0681 C3 RET
ЗТОПРОАТЕТР ENDP
сл
2
PL/M-36 COMPILER 50К86 SšRIAL МОЧА ТОН РАП
194
195
196
197
198
199
200
201
202
203
294
295
гә ғә
17
гэ
го
1%18 0 0002 20 0 00022002 21202 00020 0200282 5
9 РАРЕН ТАРЕ READ SECTION ы
посовзсосечосовозеваовазе февзее /
STOSREADSCHAR:
; STATEMENT š 194
/9 THIS PROCEDURE READS А BYTE FROM TUS PAPER TAPE READER ЈЕ THE TTY
BY ACTIVATING ОТА, SAMPLING OSR FOR THE START BIT, DEACTIVATING
DTR WHEN THE START BIT APPEARS, AND READING THE DATUM FROM TYE
USART. TO PROVIDE А HOLD-OFF CAPASILITY FOR THE LOAD COMMAN::
ONLY (NOT INTENDED POR TTY PAPER TAPS) CONTROL-S WILL CAUSE 7415
ROUTINE TO WAIT FOR A CORRESPONDING CONTROL-Q ТО BE READ 82231:
CONTINUING. ?/
STOREADCHAR PROC NEAR
0682 55 PUSH ЗР
0683 ЗВЕС MOV BP,SP
PROCEDURE BYTE;
DECLARE DELAY WORD;
LOOP:
; STATEMENT # 135
LOOP:
00ТРОТ(51045ТАТУРОНТ) з 510332513078302М, /% OTR ON */
0685 BAF2FF мо“ ОХ,ОРРЕО2Н
0688 8027 MOV AL, 27d
068А EE OUT DX
DELAY з 0;
> STATEMENT 6 127
2688 6572852020090 ADV DELAY,OH
DO WHILE (INPUT(STI$STATSPORT) AND 51030580Ү1):2, /®МАТТ STAR ТРИ
; STATEMENT 9 198
9142:
0691 ЗАЕФ2ЕЕ MOV ОХ, ОЕЕЕЗЧ
0694 25 IN гр
9695 А880 TEST AL, ЗОЯ
0697 7517 JNZ 9141
DELAY = DELAY + 1;
; STATEMENT 9 199
0699 415200 MOV АХ, DELAY
969C 33С001 ADD АХ, 1Н
069? 42035220 NOV DELAY,AX
ТЕ DELAY>S4AXZDSLAY THEN
° ; STATEMENT 2 209
0642 301027 СМР АХ, 27104
2645 7254 JB 149
24%
ОФТРУТ(ЗІО9ЗТАТФРОЯТ) = 512532515СМ80; га ЭТЭ ЦЕР ез
“ STATEMENT # 202
06А7 ЗАЕ2ЕҒ MOV OX,OFFF2H
06АА 8025 моч AL, 258
ОБАС 5% ау“ n X
2072 18108;
. STATESMEN g 2393
9540 535552 J: P САВО
Баш
PL/M-36 COMPILER
296
207
212
213
214
217
го
50530 SERIAL MONTTOR
9141: |
OUTPUT(SIOSSTATS$PORT) =
.
,
SI0$8251$CMND;
STATEMENT # 205
STATEMENT # 206
/% OTR OFF #7
/% WAIT LOOP #/
a /
0680 BAF2FF MOV DX,OFFF2H
0683 8025 МОУ AL,25H
06B5 ЕЕ OUT DX
DO WHILE (INPUT(SIO$STAT$PORT) AND SIO$RXRDY)=9;END;
; STATEMENT # 207
9142;
9686 ВАЕОЕЕ MOV DX,OFFF2H
0689 EC IN DX
ОбВА A392 TEST AL,2H
06ВС 74F8 JZ 81142
CALL STO$CHECKSCONTROLSCHAR;
; STATEMENT # 299
ОбВЕ ЕЗЕ2ЕВ CALL STOCHECKCONTROLCHAR
ТЕ CHAR = 11H THEN GOTO LOOP; /% GET ANOTHER ТЕ CTL=Q %/
; STATEMENT 48 210
06C1 803Е660011 СМР CHAR,11H
06с5 74BD JZ LOOP
RETURN CHAR;
; STATEMENT # 212
06С8 106500 MOV AL,CHAR
обсв 5D POP ВР
0600 c RET
END;
; STATEMENT # 213
ЗТОРЕЛОСВАЗ ENDP
SLOSREACSEYTL:
; STATEMENT # 214
/а THIS ROUTINE READS A BYTES FROM THE PAPER TAPE READER.
ЗТОКЕАОВТТ 5 PROC МСАК
06CD 55 РОЗН ВР
ОбСЕ РВЕС MOV ВР,5Р
PROCEDURE BYTE;
DECLARE T BYTE;
T = LOW(STO$HEX(SIO$READ$CHAR) );
; STATEMENT # 215
0600 ЕЗАЁЕЕ CALL STOREADCHAR
0603 50 PUSH AX ы 1)
0604 E83FFD CALL ЗІОНЕХ
0607 A26D00 MOV TAL
T = SHL(T,4) + LOW(STO$HEX(STO$READSCHAR! ):
| > STATEMENT # 417
06DA A96D90 MOV AL,T
0600 B194 MOV CL,4H
O6DF р2Е0 SHL AL, CL
06Е1 59 PUSH AX 81
06Е2 28902: CALL STOREADCHAR
05885 59 Риза АХ а. 2
0526 23202 САҚЫ 9 ТОНЕХ
09623 53 РЭР CX
ОБЕА 023: ADD Ab ‚СА
05:50 526992 МОМ То, ТЕ
СВЕ = CHECKSSUN >
PL/M-86 COMPILER SDK36 SERIAL MONITOR PAGE
; STATEMENT # 218
06ЕР A06D00 MOV AL,T
06F2 00066700 ADD CHECKSUM, AL
219 2 RETURN T;
; STATEMENT # 219
0626 5D POP BP
06Е7 СЗ RET
220 2 END;
; STATEMENT # 220
STOREADBYTE ENDP
221 1 SIO$READšWORD:
; STATEMENT # 221
/® THIS ROUTINE READS A WORD FROM THE PAPER TAPE READER AND RETURNS IT
AS THE VALUE OF THE PROCEDURE. 9/
STOREADWORD PROC NEAR
0628 55 РЈ5Н ВР
ОбЕ9 8ВЕС MOV BP ,SP
PROCEDURE WORD;
222 2 DECLARE T BYTE;
223 2 T = SIO$READ$BYTE;
; STATEMENT # 223
ОбЕВ E8CFFF CALL STOREADBYTe
06ҒЕ A26E00 MOV T,AL
224 2 RETURN SHL(DOUBLE(T),8) + DOUBLE(SIO$READSBYTE) ;
; STATEMENT # 224
0701 А06Е00 MOV AL,T
0704 8400 MOV AH, ОН
0706 8108 MOV CL, 8H
0708 D3£E0 SHL AX,CL
079A 50 PUSH AX . 1
0708 ЕЗВЕРЕ CALL SIOREADBYTE
ОТОБ 8400 MOV АН,ОН
0710 59 РОР CX 23
9711 0361 ADD АХ, СХ
0713 5D POP BP
0714 СЗ RET
225 2 END;
; STATEMENT # 225
STOREADWORD ENDP
/ 9992 ваа ааа аа аа 9 аа аа аа ваа а ааа 98988 а 998988
Ч INTERRUPT AND RESTORE/EXECUTE SECTION Ы
9900009 аа воо еее оа ааа ааа а 88 898 888 88 88 888 888809 /
226 1 SAVESREGISTERS:
; STATEMENT # 226
/% THIS ROUTINE IS USED ТО SAVE THE STACKED USER'S REGISTERS IN THE
MONITOR’S SAVE AREA. %/
SAVEREGISTERS PROC NEAR
42715. 55 PUSH BP
0716 8BEC MOV BP,SP
PROCEDURE;
ent 2 ВР = MEMORYS$SUSERSTACK;
; STATEMENT: # 227
0718 CH1Z2A00 LES ВХ,МЕМОНҮОЗЕНЗТАСКРТН
PL/M-85 COHPILGA
239
231
232
233
~
ма)
чл
2 36
237?
f.)
971C
071F
0722
9759
0757
30К85 SERTAL МОМТТОВ РАЈЕ
263807 мом АХ,Е5:МЕМОВХУЗСАЗТАСК"ВХ)
A33A00 MOV REGSAV+0OAH, АХ
ОЗБЯЗТАСК. ОУ: = USERSTACK.OFF + Ц;
; STATEMENT # 228
83062A0094 А21; USERSTACK, 4H
03 Тед TO 12; /% POP REGISTERS OFF OF STACK #/
> STATEMENT # 229
C605630090 «У Т, ОН
91%.
803658000 АР Т, ОАН
7725 ЈА 3145
АЕ235А4(8Е05080(1)) = MEMORY$USERSTACK;
; STATEMENT # 230
84156390 MOV BL,I
8700 MOV BH,OH
ЗЕВАЗЕТЦОО MOV BL,CS:REGORDS BX]
B700 MOV BH, OH
ОТЕЗ SHL вх, 1
C4462A00 LES SI,MEMORYUSERSTACKPTR
258804 MOV АХ, ЕЗ : МЕМОВУИЗЕНСТАСКГ ЗІ)
394730 MOV REGSAV(BX],AX
USERSTACK.OFF = USERSTACK.OFF + 2;
; STATEMENT # 231
8306240092 .ADD USERSTACK,2H
END;
; STATEMENT # 232
8905689001 ADD 1,1Н
7504 | JNZ 9144
9146:
SS = USERSTACK.SES;
; STATEMENT # 233
A12C00 MOV АХ, USERSTACK+2H
АЗЦЦОО MOV REGSAV414H, AX
ЗР = USERSTACK.OFF;
; STATEMENT # 234
A12A00 MOV AX, USERSTACK
A33800 MOV REGSAV+8H, АХ
END;
; STATEMENT 8 235
5D POP ВР
СЗ RET
SAVEREGLISTERS ENDP
ВЕЗТОПЕФЕХЕСИТЕ:
; ЗТАТЄМЕЧТ # 236
/а THIS PROCEDURE RESTORES THE STATE 27 THE 03345 МАТЧ1:2 AND
PASSES CONTROL BACK TO THE USER PROGRAM. ТТ CONTAT:IS A
MACHINE LANGUAGE SUBROUTINE ТО PERFORM THE РОРР: 1: OF THE
USER REGISTERS AND ТО EXECUTE AN "18547" то TRANS EF? 733
TO THE USER'S PROGRAM. */
RESTOREEXECUTE PROC мал?
55 PUSH ЗР
3REC MOY up ЗР
PROZEDURE:
DECLARE НЕЗТОРЕЗЕХХСЮТЯЗСОЮІ(Я» BYTS JATA
(933H,9ECH, /% МОУ ВР,5Р
э384,945Н,2024, /% MOV АХ, “ВО, PAR“? +,
РЬ/М-86 COMPILER
233
2 39
240
241
242
243
245
245
246
0769
0766
076Е
0772
0775
0774
ОТТЕ
0781
0786
О788
078С
078Е
0793
0795
0797
0794
ОТ9Е
07А1
0746
ОТАВ
O7AD
0780
0784
SDK36 SERIAL MONITOR
08ВН,05ЕН,004Н, /% MOV BX,/BP/.PARM1 a/
O8EH,ODOH, /а MOV SS,AX 8 /
08ВН,0ЕЗН, /9 МОМ 5Р,ВХ 8 /
050Н, /% РОР ВР “/
OSFH, /% РОР DI ./
OSEH, /% РОР SI е /
058Н, /% РОР ВХ 8/
О5АН, /а РОР DX 8 /
059Н, /% РОР СХ ./
058Н, /% РОР АХ а /
ОТЕН, /% РОР 05 е /
007Н, /8 РОР 55 8 /
ОСЕН), /8 IRET 8 /
RESTORESEXECUTE$CODESPTR WORD DATA ( «ВЕЗТОВЕФЕХЕСОТЕЗСОРЕ);
USERSTACK.SEG = SS;
; STATEMENT 8 238
A14400 MOV AX, НЕСЗАУ + 1 ЦН
A32C00 MOV USERSTACK+2H, АХ
USERSTACK.OFF = SP;
; STATEMENT # 239
A13800 MOV AX, REGSAV+8H
A32A00 MOV USERSTACK, AX
ро 120 то 10; /® PUSH USER'S REGISTERS ONTO HIS STACK */
; STATEMENT # 240
C606680000 MOV I, ОН
9146:
803Е68000Ү СМР Т, ОАН
1737 ЈА 8147
USERSTACK.OFF = ОЗЕВЗТАСК.ОРЕ - 2;
; STATEMENT # 241
832Е240002 SUB USERSTACK, 2H
MEMORY$USERSTACK = REGS$SAV(REG$ORD(10-1));
; STATEMENT # 242
ВЗОА MOV BL,OAH
24185820 508 BL, I
8700 MOV BH,OH
2E8A9F7400 MOV BL,CS:REGORD( ВХ)
8709 MOV Вн, ОН
01Е3 SHL BX, 1
8B4730 MOV AX, REGSAV( ВХ)
СЦ 1Е2АОО LES ВХ, MEMORYUSERSTACKPTR
268907 MOV ES:MEMORYUSERSTACK[ ВХ), АХ
END;
; STATEMENT # 243
8006680001 ADD I,1H
75D2 JNZ 8146
8147:
USERSTACK.OFF = USERSTACK.OFF - 2;
; ЗТАТЕМЕМТ # 245
832Е240002 SUB USERSTACK,2H
MEMORY$USERSTACK = BP;
; STATEMENT # 245
A13A00 MOV АХ, REGSAV+0AH
C4¥1E2A00 LES BX,MEMORYUSERSTACKPTR
268907 MOV £S:MEMORYUSERSTACK(BX],AX
CALL RESTORESEXECUTE$SCODE$PTR(USERSTACK.OFF,USERSTACK.SEG);
(г,
Р,/ч-34
287
249
де.
251
252
253
~
го
COMPILER
0787
27BB
ОТВЕ
ОТ СЦ
37065
SDK85 SERIAL MONITOR PAGE
; STATEMENT # 246
FF362A00 PUSH USERSTACK; 1
ҒЕЗ62С00 PUSH USERSTACK+2H; 2
2EFF 160400 CALL CS:RESTOREEXECUTECODEPTR
END;
; STATEMENT # 247
50 РОР ВР
СЗ RET
RESTOREEXECUTE ENDP
INTERRUPTI$ENTRY:
07C6
9797
07С8
07С0
07СЕ
07СЕ
0700
0701
0702
0703
0706
0707
0708
0709
ОТОА
0708
07DC
07DD
97рЕ
O7DF
ОТЕО
07Е2
ОТЕЦ
ОТЕ?
07Е9 ,
ОТЕС
ОТЕЕ
07Е1
ОТЕЦ
07Е6
; ФТАТЕМЕМТ # 248
/8 THIS PROCEDURE IS CALLED WHEN THE СРО IS INTERRUPTED BY EXECUTING
AN INSTRUCTION WITH THE TRAP BIT SET (SINGLE STEP). #/
06 PUSH ES
ТЕ PUSH DS
2E8E1EA600 MOV DS,CS: @@DATA$FRAME
50 PUSH AX
21 PUSH СХ
52 PUSH DX
53 PUSH BX
56 PUSH SI
27 PUSH DI
Е80900 CALL INTERRUPTIENTRY
ЈЕ РОР DI
5Е РОР 51
58 РОР BX
БА РОР ОХ
59 РОР CX
58 POP AX
ЇЕ РОР 05
07 POP ES
СЕ IRET
INTERRUPTIENTRY PROC NEAR
99 PUSH BP
ВВЕС MOV BP,SP
PROCEDURE INTERRUPT 1;
USERSTACK.OFF = STACKPTR; /% CHANGE ТО MONITOR'S STACK ®/
; STATEMENT # 249
89E0 MOV AX,SP
A32A00 MOV USERSTACK, AX
USERSTACK.SEG = STACKBASE;
; STATEMENT # 250
ВСОО MOV AX,SS
A32C00 MOV USERSTACK+2H,AX
STACKPTR = MONITOR$STACKPTR;
; STATEMENT # 251
A11400 MOV AX,MONITORSTACK2TR
89C4 MOV 5Р, АХ
ЗТАСКВАЗЕ = MONITOR$STACKBASE;
; STATEMENT # 252
A11600 MOV AX,MONITORSTACKBASE
8EDO MOV SS,AX
CALL SAVE$REGISTERS;
; STATEMENT # 253
ЕВ1СЕЕ CALL SAVEREGISTERS
Р,/М-86 COMPILER
255
256
257
258
259
260
261
262
263
264
265
266
268
269
270
w ГӘ
O7F9
O7FF
0804
0806
0809
080c
080F
0814
0816
0819
0810
081Е
0822
0828
0828
0830
0832
0835
0838
0839
FL = FL AND (МОТ STEP$TRAP);
SDK86 SERIAL MONITOR
/% CLEAR STEP FLAG 9/
; STATEMENT # 254
/% CONTINUE ТЕ NOT 55 %/
# 256
# 257
# 258
# 259
# 261
" 262
ЗТЕР FLAG #/
# 263
# 264
# 268
# 270
"INT 3"
PAGE
INSTRUCTION.
ALSO AN EXTERNAL
INTERRUPT OR A USER SOFTWARE INTERRUPT MAY CAUSE THIS PROCEDURE ТО BE
81264 A00FFFE AND ВЕСЗАУ+ ТАН , OFEFSFH
ТЕ LAST$COMMAND<>SS$COMMAND THEN
; STATEMENT # 255
803£6A0003 CMP LASTCOMMAND, 3H
7403 JZ 831
CALL RESTORESEXECUTE;
; STATEMENT
ESSDFF CALL RESTOREEXECUTE
831:
CALL SIO$CRLF;
; STATEMENT
ЕВУВЕС CALL SIOCRLF
CALL SIOSUPDATESIP;
; STATEMENT
E815FE CALL SIQUPDATEIP
IF CHAR=',' THEN
; STATEMENT
803£66002C CMP CHAR, 2CH
7515 JNZ 832
00;
IP = CSIP.OFF;
; STATEMENT
A12600 MOV AX,CSIP
A34800 MOV REGSAV+18H, AX
CS = CSIP.SEG;
; STATEMENT
A12800 MOV AX,CSIP+2H
A34000 MOV REGSAV+10H,AX
FL = FL OR ЗТЕРЗТВАР; /% SET
; STATEMENT
810ЕЗА000001 OR REGSAV+1AH, 1008
CALL RESTORESEXECUTE;
; STATEMENT
ЕЗЗВЕЕ CALL RESTOREEXECUTE
END;
832:
ТЕ CHAR<>ASCR THEN GOTO ERROR;
; STATEMENT
803Е660000 СМР CHAR,ODH
7403 JZ $+5H
Е901Ғ9 ЈМР ERROR
СОТО МЕХТЗСОММАМО;
; STATEMENT
Е937Е9 ЈМР NEXTCOMMAND
END;
INTERRUPTIENTRY ENDP
INTERRUPT3$ENTRY:
; STATEMENT
/9 THIS PROCEDURE IS CALLED WHEN THE CPU EXECUTES A
THE MONITOR INSERTS THIS (ОССН) FOR A BREAKPOINT.
CALLED. %/
06 | РОЗН Е 5
1E PUSH DS
28
PL/M-86 COMPILER
271
212
273
274
215
276
211
278
219
ОВЗА
ОВЗЕ
0840
0841
0842
0843
9844
0845
0848
0849
ОВЧА
0848
O84C
0840
O84E
O84F
0850
0851
0852
0854
0856
0859
0858
085Е
0861
0863
0866
0868
0868
086Е
SDK86 SERIAL MONITOR PAGE
2E8E1EA609 MOV DS,CS: @@DATA$FRAME
50 PUSH AX
51 PUSH CX
52 PUSH DX
53 PUSH BX
56 PUSH SI
57 PUSH DI
E80900 CALL INTERRUPT3ENTRY
5F POP DI
5Е РОР SI
5B POP BX
БА РОР DX
59 POP CX
58 POP AX
1F POP DS
07 POP ES
СЕ IRET
INTERRUPT3ZENTRY PROC NEAR
55 PUSH BP
8ВЕС. MOV ВР,ЗР
PROCEDURE INTERRUPT 3;
USERSTACK.OFF = STACKPTR;
; STATEMENT # 271
89E0 MOV AX,SP
A32A00 MOV USERSTACK, AX
USERSTACK.SEG = STACKBASE;
; STATEMENT # 272
8С00 MOV AX,SS
A32C00 MOV USERSTACK+2H,AX
STACKPTR = MONITOR$STACKPTR;
; STATEMENT # 273
A11400 MOV AX,MONITORSTACKPTR
89C4 MOV SP,AX
STACKBASE = MONITOR$STACKBASE;
; STATEMENT # 274
A11600 MOV AX,MONITORSTACKBASE
8EDO MOV SS,AX
CALL SAVE$REGISTERS;
: STATEMENT # 275
ЕВААЕЕ CALL SAVEREGISTERS
CALL 5103СВ15Р,:
; STATEMENT # 276
E839FC CALL SIOCRLF
GOTO AFTER$INTERRUPT;
; STATEMENT # 277
Е9А7Е9 ЈМР AFTERINTERRUPT
END;
INTERRUPT3ZENTRY ENDP
INIT$INT$VECTOR:
; STATEMENT # 279
/* THIS ROUTINE INITIALIZES АМ INTERRRUPT VECTOR AS FOLLOWS: THE OFFSET
FROM THE ADDRESS OF
NUMBER OF BYTES FOR THE INTERRUPT PLM PROLOGUE.
*INT$ROUTINE’
CORRECTED BY THE APPROPRIATE
THE SEGMENT FROM THE
CURRENT CS REGISTER [5 DETERMINED BY A MACHINE LANGUAGE CODED
SUBROUTINE. %/
INITINTVECTOR
PROC NEAR
29
Р,/М-85 COMPILER
280
281
282
283
0871
0872
0874
0877
0878
087c
0870
0882
0885
0888
0888
088Е
ОВВЕ
29
8ВЕС
50К86 SERIAL MONITOR
PUSH
MOV
BP
BP,SP
PROCEDURE( INT$VECTORS$PTR, INT$ROUTINESOFF
DECLARE INT$VECTORS$PTR POINTER,
SET);
INT$ROUTINE$OFFSET WORD,
РА
VECTOR BASED ТМТЗУЕСТОВЗРТА STRUCTURE (OFF WORD, SEG WORD),
"19Н", /% OFFSET FOR PROLOGUE ?/
INITSINTSVECTORS$CODE(*®) BYTE DATA
CORRECTION LITERALLY
(055Н,
08ВН,ОЕСН,
O8CH,OC8H,
OC4H,OSEH,OO4H,
026H,089H,007H,
OSDH,
0C2H,004H,000H),
га
/%
/%
/ №
/%
/%
/%
PUSH ВР в /
MOV BP,SP е /
MOV AX,CS 8 /
LES ВХ,/ВР/.РАВМІ %/
MOV ES:W/BX/,AX “/
РОР ВР °/
RET 4 * /
ІМІТФІЧТЗУЕСТОЯЗСОРЕЗРТЯ WORD DATA (.INIT$INT$VECTOR$CODE);
CALL INITSINT$VECTORSCODE$PTR( AVECTOR.SEG);
; STATEMENT # 281
BX,£BP].INTVECTORPTR
С%5Е06 СЕЗ
26804702 LEA
06 PUSH
50 PUSH
2EFF 160600 CALL
8B4604 MOV
83Е819 SUB
C45E06 LES
268907 MOV
END;
5D POP
C20600 RET
INTTINTVECTOR
AX, ES: ЧЕСТОВ( BX+2H]
ES
AX
CS: INITINTVECTORCODEPTR
VECTOR.OFF = INT$ROUTINESOFFSET - CORRECTION;
BP
6H
81
гл
; STATEMENT # 282
АХ, [ВР]. INTROUTINEOFFSET
АХ, 19Н
BX,°BP].INTVECTORPTR
ES: VECTOR( BX],AX
; STATEMENT # 283
ENDP
/8 SEGMENT PORTION
# /
/% OFFSET PORTION #/
/% 10102020 0200 10 200 ве ва ааа ааа ааа аа аа а ае на на аа ао аа ааа а ра аа аа за
ХАЛЛЕ
COMMAND MODULE
ABSTRACT
- є — о є»
= = = =
THIS MODULE CONTAINS ALL THE COMMANDS IMPLEMENTED AS INDIVIDUAL PROCEDURES
AND CALLED FROM THE OUTER BLOCK OF THE COMMAND DISPATCH LOOP.
MODULE ORGANIZATION
THIS MODULE CONTAINS THE SOLLOWING SECTIONS:
1 -
COMMANDS SECTION
519500
STO$SINGLESSTEP
ЗТОЗЕХАМЗМЕМ
STOSEXAM$REG
STOSMOVE
STOS$DISPLAY
GO
SINGLE STEP
SUBSTITUTE MEMORY
EXAMINE REGISTER
MOVE
DISPLAY BYTES
30
Р,/М-86 COMPILER
284
285
285
287
288
289
290
292
293
294
го
0892
0893
0895
0898
0890
089F
08А2
08А6
08А7
08А8
ОВАС
ОВАЕ
0884
0886
0889
оввр
08С0
08C3
08С7
08СВ
SDK86 SERIAL MONITOR
STO$INPUT INPUT PORT
510300ТРОЫТ OUTPUT PORT
SIO$WRITE WRITE DATA RECORDS
SIO$READ READ DATA RECORDS
2. COMMAND DISPATCH (OUTER BLOCK, MAIN PROGRAM LOOP)
NEXT$COMMAND DISPATCH
ERROR ERROR ROUTINE
/„чавнанававаанаавааанава
5 COMMAND SECTION в
озвепносоваовааован EEE /
510800:
; STATEMENT # 284
/9 IMPLEMENTS THE '00' COMMAND. THE USER MAY SPECIFY A NEW
ТР: РС AND AN OPTIONAL BREAKPOINT. %/
STOGO PROC NEAR
55 PUSH BP
ВВЕС MOV BP,SP
PROCEDURE;
CALL SILO$UPDATES$TP;
; STATEMENT # 285
E88DFD CALL STOUPDATEIP
ТЕ СНАК-"," THEN /® BREAKPOINT #/
; STATEMENT # 286
803Е66002С СМР СНАВ,2СН
7536 JNZ 034
00:
CALL SIO$GETS$CHAR;
; STATEMENT # 288
E86DFA CALL ЗІОСЕТСНАВ
CALL SIO$GET$ADDR(@BRK1,CSIP.SEG);
: STATEMENT # 289
8D062200 LEA АХ, ВЕК 1
ТЕ РЈ5Н 05 ; 1
50 PUSH AX З
ЕЕЗ62800 PUSH CSIP+2H ; 3
E835FD CALL STOGETADDR
IF CHAR<>ASCR THEN GOTO ERROR;
; STATEMENT # 299
803E66000D CMP CHAR,ODH
7403 JZ $+5H
EQ94DFY JMP ERROR
BRKISSAVE = MEMORY$BRK1;
; STATEMENT # 292
С%1Е2200 LES ВХ,МЕМОНҮВНКЇРТН
268407 MOV AL,ES: MEMORY BRK1{ BX]
A26500 MOV BRKISAVE, AL
MEMORY$BRK1 = BREAK$INST;
; STATEMENT # 293
26С607СС MOV ES:MEMORYBRK1(BX],0CCH
ТЕ MEMORY$BRK1<>BREAK$INST THEN GOTO ERROR;
; STATEMENT # 294
СЦ1Е2200 LES BX,MEMORYBRKIPTR
26893FCC CMP ES:MEMORYBRK1{£BX],0CCH
31
PL/M-86 COMPILER
295
277
298
301
393
394
305
396
~
ОВСЕ
0801
0804
9809
0808
ОВЕО
0822
0825
0853
08Е3
O8EE
98Ғ1
ОВЕЦ
ОВЕА
O8FD
ОВЕЕ
OSFF
0900
0902
9995
092А
50К86 SERIAL MONITOR
AND
7403 JZ $+5Н
E932F9 JMP ERROR
BRKI$FLAG = TRUE;
; STATEMENT 4 296
СБОббБЧО0ЕЕ MOV BRKIFLAG,OFFH
END;
; STATEMENT # 297
5ВОА ЈМР 937
934:
2555 /9 NO BREAKPOINT #/
ТЕ CHAR<>ASCR THEN СОТО ERROR;
; STATEMENT # 298
803Е660000 СМР CHAR,ODH
7403 JZ $+5H
292129 ЈМР ERROR
; STATEMENT # 299
837:
CALL STO$CRLF;
; STATEMENT # 300
ESBFFB CALL SLOCRLE
ТР з СЗІР.ОЄЕ;
; STATEMENT # 301
A12600 MOV АХ, СЗТР
434890 МОУ REGSAV+18H,AX
CS з CSIP.SEG;
; STATEMENT # 302
А 12809 MOV AX,CSTP+2H
A34000 MOV REGSAV+10H,AX
FL = FL AND (NOT STEP$TRAP); /® CLEAR ТЕ SET 9/
; STATEMENT # 303
8126ШАООЕГҒҰ АМО REGSAV+1AH,OFEFFH
CALL RESTORESEXECUTS;
; STATEMENT # 304
Е859Ғ% CALL RESTOREEXECUTE
END;
; STATEMENT # 305
5D POP BP
C3 RET
51000 ENDP
STO$SSINGLESSTEP:
; STATEMENT # 395
/% IMPLEMENTS THE SINGLE STEP COMMAND. DISPLAYS IP AND THE
CURRENT INSTRUCTION BTYE. OPENS CS: ТР FOR INPUT. DEPRESSING
COMMA CAUSES THE MONITOR TO SINGLE STEP THE INSTRUCTION,
PERIOD TERMINATES THE COMMAND. %/
STOSINGLESTEP PROC NEAR
55 PUSH BP
ВВЕС MOV ВР, ӘР
PROCEDURE;
CALL 5108: РОАТЕЗТР;
“ STATEMENT # 307
582060 CALL ЗТОПРОАТЕТР
(5 СНАНСО»",' THEN СОТО ERROR;
; STATEMENT # 305
893E56002C CMP CHAR, 2СН
7403 JZ 3-5
PL/M-86 COMPILER
311
313
314
315
3 15
317
318
321
322
323
324
го
090C
090F
0912
0915
0918
0918
0921
0924
0925
0926
0927
0929
092C
0930
0931
0932
0936
0939
093E
0940
0943
0946
9949
0948
SDK86 SERIAL MONITOR
STATEMENT # 310
STATEMENT # 311
STATEMENT # 312
STATEMENT 9 313
STATEMENT # 314
STATEMENT # 315
STATEMENT # 317
STATEMENT # 318
STATEMENT # 319
STATEMENT # 321
STATEMENT # 322
STATEMENT # 323
ЕФЕТЕВ ЈМР ERROR
IP = CSIP.OFF;
;
А12600 MOV АХ, СТР
A34800 MOV REGSAV+18H, АХ
CS = CSIP.SEG;
412800 моу АХ, СЗТР+2Н
34000 MOV REGSAV+10H, AX
FL = FL OR ЗТЕРЗТВАР; ~
;
810Е%4000001 OR REGSAV+1AH, 100H
CALL RESTORESEXECUTE;
Е8І2ҒЕ CALL RESTOREEXECUTE
END;
;
5р РОР ВР
сз ВЕТ
51051МС1,Е5ТЕР ENDP
ЗТОЗЕХАМЗМЕМ:
;
/% IMPLEMENTS THE EXAMINE MEMORY COMMAND. ®/
ЗТОЕХАММЕМ PROC NEAR
55 PUSH BP
ВВЕС MOV BP,SP
PROCEDURE;
DECLARE W WORD;
CALL SIO$TEST$WORDS$MODE;
Е88СЕВ CALL SLOTESTWORDMODE
CALL SIO$GET$ADDR(@ARG1,CS);
80061400 LEA AX, ARG1
ЈЕ PUSH DS ; 1
50 PUSH AX ; 2
FF364000 PUSH REGSAV+10H; 3
ЕВАВЕС CALL SLOGETADDR
ТР CHAR<>',' THEN GOTO ERROR;
803Е66002С СМР CHAR, 2CH
7403 12 $+5H
E9C3F8 JMP ERROR
DO WHILE TRUE;
8148: I
CALL SIO$OUT$BLANK;
;
E831FA CALL SILOOUTBLANK
IF WORD$MODE THEN
406900 моу AL, WORDMODE
0008 RCR AL,1
730C JNE 85!
CALL STO$OUT$WORD(MEMORYSWORDS$ARG1);
STATEMENT # 324
PAGE
33
Р,/М-86 COMPILER
325
326
зет
328
329
333
= w
0980
0951
0954
0957
0959
0950
0960
096 3
0965
0966
0969
096C
096Р
0974
0976
0977
0978
0970
097F
0982
0985
098A
098с
098Е
098Е
0990
0995
0997
0999
099А
0998
0990
099F
ОЗА 1
5086 SERIAL MONITOR
C4¥1E1A00 LES BX,MEMORYARGIPTR
26FF37 PUSH ES:MEMORYWORDARG1£ BX]
E809FA CALL SIOOUTWORD
EBOA JMP 942
841:
ELSE
CALL SIO$OUTS$BYTE( MEMORY$ARG1);
; STATEMENT #
C41E1A00 LES BX,MEMORYARGIPTR
26ЕРЗ7 PUSH ЕЗ:МЕМОНҮАНО1ГВХ }
ЕЗСОЕ9 CALL ЗТООПТВУТЕ
#42:
CALL SIO$OUTSCHAR('-');
; STATEMENT #
вого MOV AL,2DH
50 PUSH AX а
Е886Ғ9 CALL STOOUTCHAR
CALL SIO$OUTS$BLANK;
; STATEMENT #
ЕВОВРА CALL STOOUTBLANK
CALL ЗІОЗСЕТУСНАЯ;
; STATEMENT #
E8A0F9 CALL STOGETCHAR
ЇР CHARsASCR THEN RETURN;
; STATEMENT #
803E66000D CMP CHAR,ODH
7502 JNZ 843
; STATEMENT 8
50 РОР ВР
СЗ RET
943:
ТЕ CHAR<>',' THEN
; STATEMENT #
803E66002C CMP CHAR, ФСН
745C JZ 044
00;
W з SIO$GET$WORD;
; STATEMENT #
ЕВ86ЕРВ CALL STOGETWORD
A35200 MOV W,AX
IF (CHAR <> ',') AND (CHAR <> ASCR)
; STATEMENT #
803Е66002С СМР CHAR,2CH
BOFF MOV AL,OFFH
7501 482 $+3H
%0 INC AX
50 PUSH AX а
803Е660000 СМР CHAR,ODH
BOF F MOV AL,OFFH
7501 JNZ $+3H
40 INC AX
59 РОР CX . 1
2201 AND АБ, CL
0008 АСА АС, 1
7303 JNB $+5H
Е962Ғ8 ЈМР ERROR
ТЕ WORD$MODE THEN
325
326
327
328
329
330
333
THEN GOTO ERROR;
334
РАСЕ
34
PL/M-86 COMPILER
337
338
339
341
342
343
344
346
347
348
350
351
=
=
кол
O9A4
09A7
09A9
0948
ОЗАЕ
0982
0985
0989
O9BC
О9СО
09С2
09С5
0969
О9СС
09СЕ
0903
0906
0908
0958
0960
09E2
09E3
О9ЕЦ
09Е7
09Е9
09ЕВ
09Ғ0
SDK86 SERIAL MONITOR PAGE
; STATEMENT # 336
А06900 MOV AL,WORDMODE
0008 АСК АГ, 1
7317 JNB @u6
ро:
MEMORY$WORD$ARGI = W;
; STATEMENT # 338
A15200 MOV AX,W
C41E1A00 LES BX, MEMORYARGIPTR
268907 MOV ES:MEMORYWORDARG1(BX],AX
ТЕ MEMORY$WORD$ARG1<>W THEN GOTO ERROR;
; STATEMENT # 339
СЦ1ЕТАОО LES ВХ, МЕМОНХАКС 1РТН
268807 MOV AX,ES:MEMORYWORDARG1[ BX]
38065200 СМР AX,W
EB14 JMP 811
ЕМО;
; STATEMENT # 341
046:
ELSE
DO;
MEMORY$ARG1 = LOW(W);
; STATEMENT # 343
A15200 MOV AX,W
C4¥1E1A00 LES BX,MEMORYARGIPTR
268807 MOV ES:MEMORYARG1{BX],AL
ТЕ MEMORY$ARG1<>LOW(W) THEN GOTO ERROR;
; STATEMENT # 344
A15200 MOV АХ, И
СЦ 1ЕТАФО LES BX,MEMORYARGIPTR
263807 CMP ES:MEMORYARG1(BX],AL
011:
7403 42 $+5H
Е92ВЕ8 ЈМР ERROR
; STATEMENT # 3155
END;
END;
645:
ТЕ CHAR=ASCR ТНЕМ RETURN;
; STATEMENT # 348
803Е66000р СМР CHAR,ODH
7502 JNZ 955
; STATEMENT # 349
5D POP BP
C3 RET
850:
IF WORD$MODE ТНЕН
: STATEMENT 4 350
A06900 MOV AL,WORDMODE
0008 АСВ АС, 1
7307 JNB 851
ARG1.OFF = ARG1.0FF + 2;
; STATEMENT # 351
83061A0002 ADD ARG1,2H
ЕВО5 ЈМР 052
951:
ELSE
35
PL/M-86 COMPILER
SDK86 SERIAL MONITOR
352 3 ARG1.OFF = АВС1,О0ЁР + 1;
; STATEMENT 352
09F2 83061A0001 ADD ARG1,1H
852:
353 3 CALL SIO$CRLF;
; STATEMENT 353
09F7 E8ADFA CALL SIOCRLF
354 з CALL SIO$OUT$WORD(ARG1.,OFF);
; STATEMENT 354
09ҒА FF361A00 PUSH ARG1 . 4
09ЕЕ E85FF9 CALL STOOUTWORD
355 3 END;
: STATEMENT 355
ДАО E93FFF JMP 8148
9149:
356 2 END;
$ STATEMENT 356
ОАОЦ 50 РОР ВР
0405 СЗ RET
STOEXAMMEM ENDP
357 1 SIO$EXAM$REG:
; STATEMENT # 357
/9 IMPLEMENTS THE EXAMINE REGISTER COMMAND. SCANS FOR A VALID
REGISTER NAME AND DISPLAYS THE VALUE OF THAT REGISTER WHICH IS
OPTIONALLY OPENED FOR INPUT. COMMA INCREMENTS TO NEXT REGISTER
UNLESS ІТ IS 'FL' WHICH TERMINATES AS DOES CR.
ЗТОЕХАМВЕС PROC NEAR
0406 55 PUSH BP
0А07 8BEC MOV BP,SP
PROCEDURE;
358 2 DECLARE (T,I) BYTE, SAVE WORD;
359 2 CALL ЗІОЗЗСАНЗВСАНК;
; STATEMENT 359
0509 E8D2FA CALL SIOSCANBLANK
360 2 IF СНАН-А5ЗСН THEN
; STATEMENT 360
ОАОС 803Е660000 CMP CHAR,ODH
OA11 7559 482 853
361 2 DO;
362 3 CALL SIO$CRLF;
; STATEMENT 362
0А13 Е891БЕА CALL STOCRLPF
363 3 DO 140 ТО 13;
; STATEMENT 363
0A16 C€C606700000 MOV Т.9098
2150:
ОА1В 803Е700000 СМР Т, ООН
0420 7748 ЈА 0151
364 4 CALL SIO$OUT$BLANK;
; STATEMENT 364
0422 E852F9 CALL SIOOUTBLANK
365 4 CALL STO$OUTSCHAR( НЕС(Т?2));
; STATEMENT # 365
0425 407000 MOV 1121
0428 8102 MOV CL. 2a
OA2A F6E1 MUL CL
PAGE
36
РО/М-86 COMPILER
OA2C
OA2E
OA32
365 ч
0А35
0438
ОАЗА
ОАЗС
ОАЗЕ
OA42
367 ü
OA4S
0447
0А48
368 4
OA4B
ОАЧЕ
0451
0453
0456
0459
ОАБЕ
ОА6О
371 4
0A6 3
0468
372 3
ОАбА
OA6B
373 3
371 2
0А6С
ОАбЕ
0471
0473
0475
376 2
ОА78
ОА?В
377 2
ОАТЕ
378 а
SDK86 SERIAL MONITOR
BX,AX
СЗ: ВЕС! BX]
SIOOUTCHAR
CALL STO$OUTSCHAR( REG(I#2+41));
; STATEMENT # 366
AL,I
CL,2H
СЕ
ВХ,АХ
СЗ: НЕСГВХ+ТН )
ЗІООЧТСНАВ
CALL SIO$OUT$CHAR('=');
: STATEMENT # 367
AL, ЗОН
АХ 5 1
STOOUTCHAR
CALL SLOSOUT$WORD(REG$SAV(I));
; STATEMENT # 368
BL,I
BH,OH
вх, 1
НЕСЗАУ BX]; 1
SLOOUTWORD
ТЕ Таб THEN CALL ТОЗСА:
; STATEMENT # 369
1,68
954
; ЗТАТЕМЕМТ # 370
SIOCRLF
; STATEMENT # 371
1,14
3150
; STATEMENT # 372
ВР
ТЕ NOT(SIO$VALID$REG$FIRST) THEN GOTO ERROR;
89C3 МОМ
2ЕЕЕ7758 PUSH
ЕЗВАЕВ CALL
A07000 MOV
8102 МОМ
F6E1 MUL
89C3 MOV
2EFF7759 PUSH
E8AAF8 CALL
8030 МОУ
50 PUSH
ЕВАЧЕВ CALL
ВА 1Е7000 МОУ
8700 MOV
О1ЕЗ SHL
FF7730 PUSH
E807F9 CALL
803Е700006 СМР
7503 JNZ
ЕВЦЦЕА CALL
854:
END;
8006700001 ADD
7561 JNZ
0151:
RETURN;
5D POP
СЗ RET
END;
853:
Е8С2Е9 CALL
Е6р0 NOT
5008 RCR
7303 JNB
EQSEF7 JMP
Т, = CHAR;
406600 МОМ
А26ЕО0 MOV
CALL SIO$GETSCHAR;
E88EF8 CALL
; STATEMENT # 374
STOVALTDR&EGFIRST
AL
AL,1
$+5H
ERROR
; STATEMENT й 375
AL,CHAR
T,AL
; STATEMENT # 377
ЗІОСЕТСНАВ
ТР NOT(SIO$VALID$REG(T,CHAR)) THEN GOTO ERROR;
; ЗТАТЕМЕМТ # 378
РАСЕ
37
PL/M-86 COMPILER
ОА81
0485
ОА89
ОАВС
OASE
0490
0492
380 г
0495
0498
381 г
382 3
0А9В
0А90
0А9Е
383 3
0АА1
OAAS
ОДА?
ОДА
ОААС
388 3
OAAF
0АВ1
OAB2
385 3
0АВ5
386 3
0188
387 3
OABB
ОАСО
ОАС2
ОАСЦ
ОАС5
0АС6
0АСВ
OacD
OACF
OADO
ОАР 1
OAD3
0495
0А07
ДАРА
SDK86 SERIAL MONITOR
FF366F00 PUSH T а 4
FF366600 PUSH CHAR . ; 2
Е80ШЕ9 CALL STOVALIDREG
2600 NOT AL
0008 АСА AL, 1
7303 JNB 3-5Н
6971Е7 ЈМР ERROR
I = REG$INDEX;
; STATEMENT
A12E00 MOV АХ, REGINDEX
A27000 MOV T,AL
DO WHILE TRUE;
; STATEMENT
@152:
CALL ЗТОЗОПТЗСНАЯ( "з");
; STATEMENT
8030 мо“ АС, ЗОН
50 РОЗН АХ 4. 1
ЕЗЦЕРЗ CALL ЗТООЧТСНАЯ
CALL SIOSOUTSWORD(REGS$SAV(I));
$ STATEMENT
8A1E7000 MOV BL, L
B700 МОУ ВН, ЭН
0153 SHL BX, 1
FF7730 PUSH REGSAV( BX]; 1
E8B1F8 CALL SIOOUTWORD
CALL ФТОЗОЏТЗСНАА("-").
; STATEMENT
8020 MOV AL,2DH
50 PUSH AX 5 4
ЕВЗАЕ8 CALL 51000ТСНАН
CALL ЗІОФОЧТУВСАНК;
: ЗТАТЕМЕНТ
ЕВВЕЕВ CALL STOOUTBLANK
CALL SIO$GETSCHAR;
: STATEMENT
E854F8 CALL STOGETCHAR
IF СНАК<>',' AND CHAR<>ASCR THEN
; STATEMENT
803Е66002С СМР СНАЯ, 2СН
ВОРР МОУ AL,OFFH
7501 JNZ $+3H
40 INC АХ
50 PUSH AX е 4
803£66000D CMP СНАН,ООН
BOF F MOV AL,OFFH
7591 JNZ $+3H
40 INC АХ
59 РОР CX ; 1
2201 АМО АС, СЪ,
0008 RCR AL, 1
7333 JNB 857
00;
ЗАМЕ = SLO$GETS$WORD;
E816FA CALL
A35400 MOV
380
381
382
383
384
385
386
387
; STATEMENT # 389
ЗТОСЕТИОКО
ЗАУЕ, АХ
PAGE
38
РІ,/М-86 COMPILER
390 4
OADD
OAE2
ОАЕЧ
OAE6
ОАЕТ
ОАЕВ
ОАЕО
ОАЕЕ
ОАЕ 1
ОАЕФ
ОАЕЗ
ОАЕ5
ОАЕТ
OAFY
392 4
OAFC
0800
овог
ОВОЦ
0807
393 4
394 3
ОВОА
OBOF
0B11
0B13
0814
0815
ОВІА
081С
ОВ:Е
ОВТЕ
0820
0822
OB24
0B26
0827
0828
397 3
0820
398 3
0830
0833
0835
0837
0839
SDK86 SERIAL MONITOR
IF (CHAR <> '
" ) AND (CHAR <> ASCR) THEN GOTO ERROR;
; STATEMENT # 390
AX . 17
CHAR,ODH
AL,OFFH
$+3H
AX
CX 24
АҺ, CL
AL, 1
$+5H
ERROR
SAVE;
; STATEMENT # 392
BL, I
BH,OH
BX, 1
AX,SAVE
ВЕСЗАУ[ ВХ] ‚АХ
ТЕ CHAR=ASCR OR 1-13 THEN RETURN;
; ЗТАТЕМЕНТ # 394
СНАК, ООН
AL,OFFH
$+3H
AX
; STATEMENT # 395
; STATEMENT # 396
I, 1H
; STATEMENT # 397
SIOCRLF
CALL SIO$OUT$CHAR(REG(I*#2));
803E66002C CMP
BOFF MOV
7501 JNZ
40 INC
50 PUSH
803E66000D CMP
BOFF MOV
7501 JNZ
10 ІМС
59 РОР
2201 AND
0008 АСА
7303 JNB
E90AF7 ЈМР
REG$SAV(I) з
8A1E7000 MOV
B700 MOV
01Е3 SHL
А15400 MOV
894730 MOV
END;
@57:
803E66000D CMP
BOFF MOV
7401 92
40 INC
50 PUSH
803E79000D CMP
BOFF MOV
7401 JZ
4Q INC
59 POP
OAC1 OR
DOD8 RCR
1302 JNB
5D POP
C3 RET
@59
I = I 1;
8006700001 ADD
CALL SIO$CRLF;
E877F9 CALL
A07000 MOV
8102 МОМ
F6E1 MUL
89C3 MOV
2ЕЕЕ7758 РЏ5Н
; STATEMENT # 393
ІШІ
CL,2H
CL
BX, AX
CS: НЕС ВХ)
РАСЕ
39
PL/M-86 COMPILER 50К36 SERIAL MONITOR PAGE
0830 «ЗАРЕ7 CALL SIOOUTCHAR
399 3 CALL SIOSOUTSCHAR( REG(I#241));
; STATEMENT # 399
0850 А07000 MOV AG yt
0843 8192 MOV CL, 2H
0845 Ғ6ЕТ MUL си
0847 3963 мом ВХ, AX
3849 2EFF7759 PUSH CS:REG(BX+1H]
9840 «89887 CALL SIQOUTCHAR
800 3 END;
; STATEMENT # 400
0850 E943FF ЈМР 2152
9153
401 2 END;
; STATEMENT # 401
0853 50 РОР ВР
9854 C3 RET
ЗІОЄХАЙВЕС ENDP
802 1 3125М0У2:
; ЗТАТТМЕХ7 8 402
/8 IMPLEMENTS THE MOVE COMMAND. ACCEPTS 3 ARGUMENTS AMD MOVIS THE
BLOCK 97 MEMORY SPECIFIED BY ARGI-ARG2 ТО ARG3. АЗО24А821 OR THERE
15 A DIFFERENCE WHEN THE BYTS IS READ BACK, THEN SRAGR. #/
SIOMOVE PROC NEAR
0855 55 PUSH BP
0856 авес MOV ЗР, SP
PRICEDURE;
493 2 CALL SLO$SCANSBLANK;
; STATEMENT # 403
0858 5833Е9 CALL ЗІОЗСАНВСАНК
404 2 CALL STO$GET$ADDR(@ARG1,CS); /% FIRST ARGUMENT #/
; STATEMENT # 404
1838 30051307 44 АХ, ААС!
3858 1: РУЗН DS ; 1
0860 52 РУЗН АХ ; 2
0861 77364009 PUSH REGSAV+10H; 3
0865 ES87CFA CALL 5120%ТА00В
405 2 ЇР CHAR<>',' THEN GOTO ERROR;
; STATEMENT 1 495
2868 803=55002С CMP СНАЗ,20Н
9860 7403 22 $+3H
ОВ6Е Е99%Ғ6 ЈМ? ERROR
1407 2 CALL 519358 ТЗСНАА;
; ЗТАТЕМЕЧТ # 407
2872 ЕЗЗАЄ" CALL SIOGETCHAR
498 2 ЕЧОЧОРЕ = STOS$SETS$WORD; /9 SECOND ARGUMENT »/
; STATEMENT # 408
0875 £37379 CALL SIOGETWORD
0873 431800 MOV ENDOFF,AX
409 2 IF ЕМОЗОРРСААСТ.ОРЕ THEN GOTO ERROR;
; STATEMENT 9 429
2878 A112309 мом АХ, ЕМООЕЕ
287: 38051409 CHP АХ, ARGI
2832 7493 JNB 5.54
BSU 22745 ЈМР 28802
411 2 i? CHAR<>’,’ THEN GOTO ERROR:
40
Р,/М-86 COMPILER
413
415
417
418
419
421
423
124
425
426
0887
088С
0В8Е
0891
0894
0898
0899
ОВЗА
0В9Е
ОВА1
OBA6
OBA8
OBAB
OBAE
OBB2
0885
0889
ОВВС
ОВСО
ОВСЗ
08С7
ОВСА
OBCC
OBCF
OBD2
0806
0808
0В09
ОВОА
OBDF
ОВЕЦ
SDK86 SERIAL MONITOR
.
,
LOOP:
STATEMENT #
411
113
ARGUMENT %/
18
415
ці?
418
419
421
422
423
124
425
803Е66002С СМР CHAR, 2CH
7403 dz $+5H
297526 ЈМР ERROR
CALL SIO$GET$CHAR;
: STATEMENT #
E87BF7 CALL SIOGETCHAR
CALL SIO$GET$ADDR( @ARG3,CS); /8 THIRD
- STATEMENT #
8D961E00 LEA AX,ARG3
1Е PUSH DS ; 4
50 PUSH AX . 2
FF 364000 PUSH REGSAV+10H; 3
ЕВЦЗЕА CALL SIOGETADDR
IF CHAR<>ASCR THEN GOTO ERROR;
; STATEMENT й
803£66000D CMP CHAR,ODH
7403 27 $+5H
E9SBF6 JMP ERROR
CALL SIO$CRLF;
; STATEMENT #
E8F9F8 CALL SIOCRLF
; STATEMENT #
LOOP:
MEMORY$ARG3 = MEMORYS$ARG1;
СЦТЕТАОО LES BX,MEMORYARGIPTR
268407 MOV AL,ES:MEMORYARGIS BX]
C41E1200 LES BX,MEMORYARG3PTR
268807 MOV ES:MEMORYARG3( ВХ ] ‚АГ
ТЕ MEMORY$ARG3<>MEMORY$ARG1 THEN GOTO ERROR;
; STATEMENT й
C41E1E00 LES BX,MEMORYARG3PTR
268A07 MOV АС, Е$ : МЕМОВУАВС 3 [ BX]
C41E1A00 LES BX,MEMORYARGIPTR
263A07 CMP А.,ЕЗ:МЕМОНҮАНО1Г BX]
7403 JZ $+5H
Е937Е6 ЈМР ERROR
ТЕ ARG1.OFF = ENDS$OFF THEN RETURN;
; STATEMENT й
A11A00 MOV AX, АВС 1
38061800 СМР AX, ENDOFF
7502 JNZ 955
; ФТАТЕМЕНТ #
50 РОР ВР
СЗ RET
055:
ARG1.OFF = ARG1.OFF + 1,
; STATEMENT #
83061A0001 ADD ARG1,1H
ARG3.OFF з ARG3.OFF + 1;
; STATEMENT #
83061Е0001 ADD ARG3,1H
GOTO LOOP;
; STATEMENT #
ЕВСВ ЈМР LOOP
END;
PAGE
41
Р,/М-86 COMPILER
SDK86 SERIAL MONITOR
STOMOVE ENDP
427 1 SLOSDISPLAY:
; STATEMENT # 427
/% IMPLEMENTS THE DISPLAY BYTE COMMAND. ТЕ CALLED WITH 1 PARM THEN
OUTPUTS A SINGLE BYTE. IF CALLED WITH 2 PARMS THEN OUTPUTS THE RANGE
BETWEEN THE TWO ADDRESSES. ТЕ OFFSET<BEGIN THEN OUTPUTS ONLY A SINGLE
BYTE. ®/
SIODISPLAY PROC NEAR
OBE6 55 PUSH BP
ОВЕТ ЗВЕС MOV BP,SP
PROCEDURE;
428 2 DECLARE Т BYTE;
429 2 CALL SIO$TEST$wORD$MODE;
; STATEMENT # 429
OBEY ЕВССЕВ CALL STOTESTWORDMODE
430 2 CALL SIO$GETSADDR(9ARG1,CS);
; STATEMENT # 430
OBEC 8D061A00 LEA AX, ARG1
OBFO 1E PUSH DS 51
0ВЕ1 50 PUSH AX . 2
ОВЕ2 FF364000 PUSH REGSAV+10H; 3
ОВЕ5 ЕЗЕВЕЗ CALL SIOGETADDR
431 2 ТЕ CHARsASCR THEN
; STATEMENT # 431
ОВЕ9 8032560000 CMP CHAR,ODH
OBFE 7508 JNZ 966
432 2 ENDSOFF = АВС1,ОЁР,
; STATEMENT # 432
ОСОО А11А00 MOV AX,ARG1
0C03 13431300 MOV ENDOFF, AX
0606 EB29 JMP NEWLINE
856:
ELSE
433 2 ро:
434 3 ТЕ СНАВО»"',' THEN GOTO ERROR;
; STATEMENT # 434
0С08 803Е656002С CMP CHAR, 2CH
OCOD 7403 JZ $+5Н
ОСОЕ Е9ҒШЕ5 ЈМР ERROR
436 3 CALL ФТОЗОЕТЗСНАА;
; STATEMENT # 436
0С12 ES8FAFS6 CALL STOGETCHAR
437 3 END$SOFF = SIO$GETS$WORD;
; STATEMENT # 437
0С15 ЕВОВЕВ CALL STOGETWORD
0c18 A31800 MOV SNDOFEF, АХ
438 3 IF ЕМОЗОЕЕ < ARG1.0FF THEN GOTO ERROR;
; STATEMENT # 438
0С18 411800 М0У AX, ENDOFF
ОС1Е 32961A00 CMP АХ, ААС1
0C22 7303 JNB $+5H
0С2% Е9ПЕЕ5 ЈМР cRROR
440 3 ТЕ CHAR<>ASCR THEN SOTO ERROR;
; STATEMENT 8 440
OG 2 7 803Е660000 СМР CHAR,ODH
2626 7403 1: $+5H
РО/М-86 COMPILER
442
443
Ццц
445
446
147
448
449
451
452
453
usy
«о
го
0С2Е
0031
0c34
0с33
0C 3B
ОСЗЕ
09041
0043
ocus
ОСЦ9
ОСЦС
ОСЧЕ
0052
0056
0058
9659
OCSA
ОСБЕ
0С6 1
ОСБ5
0068
0С6В
ОСбЕ
Фета
ОС7Ц
9675
SDK86 SERIAL МОМТТОВ
#
it
Е905Е5 ЈМР ERROR
END;
NEWLINE:
; STATEMENT
NEWLINE:
CALL SIO$CRLF;
E873F8 CALL STOCRLF
CALL STO$OUT$WORD(ARG1.OFF);
; STATEMENT
FF361A00 PUSH ARG1 81
Е825Е7 CALL 51000ТЧОНО
LOOP: CALL SIO$OUT$BLANK;
; STATEMENT
LOOP:
Е839Е7 CALL SIOOUTBLANK
IF WORD$MODE THEN
; STATEMENT
106909 МОУ AL,WORDMODE
0008 RCR AL, 1
7316 JNB 871
00;
CALL ЗТОЗОЦТ$ НОВО ( MEMORY$WORD$ARG1);
; ЗТАТЕМЕМТ
СЦ1ЕТАОО LES BX,MEMORYARGIPTR
26FF37 PUSH ES:MEMORYWORDARGI(BKX]
E811F7 CALL SIOOUTWORD
IF ARG1.,.OFF = END$OFF THEN RETURN;
: STATEMENT
A11A00 MOV AX,ARG1
38061800 СМР AX, ENDOFF
7502 JNZ 372
; STATEMENT
5р РОР ВР
СЗ КЕТ
972:
АВОТ „ОБЕ = ARGI.OFF + 1;
; STATEMENT
83061A0001 ADD АВС1,1Н
END;
; STATEMENT
EBOA JMP 873
871:
ELSE
CALL SIO$OUT$BYTE(MEMORYSARG1);
; STATEMENT
C4¥1E1A00 LES BX,MEMORYARGIPTR
25FF37 PUSH ES:MEMORYARG1% BX]
E8C5F6 CALL 51209ТВҮТЕ
Ө73:
ТЕ АВС1.ОЕГ>-ЕМр%9ОЕЕ THEN RETURN;
; STATEMENT
A11A00 MOV 4X,ARG1
38051800 СМР АХ,ЕМООЁЕ
7202 ЈВ 871
; STATEMENT
50 РОР ВР
СЗ RET
143
444
145
446
448
44g
450
451
452
453
454
455
РАСЕ
43
PL/M-86 COMPILER
460
461
462
463
464
465
466
468
0076
0С7В
ОСТЕ
0081
0085
0089
ОСВВ
ОСВО
ОСЗЕ
ОСВЕ
0С94
0096
00938
0699
70690
0С9Е
OCAO
OCA2
ОСА
OCA6
ОСА?
ОСА9
ОСАС
ОСАЕ
0СВ2
0С87
089
ОСВС
50К86 SERIAL MONITOR
875:
ARG1.OFF з ARG1,OFF + 1;
-..
ЗТАТЕМЕМТ 9 456
8306 140001 ADD ARG1,1H
T = ARG1.OFF AND OOOFH;
; STATEMENT # 457
A11A00 MOV AX, АВС!
250F00 AND АХ,ОЕН
427100 MOV T,AL
ТЕ Т:0 OR (WORD$MODE AND Т-1) THEN GOTO NEWLINE;
; STATEMENT # 458
8238710000 СМР Т, ОН
ВОЕЕ MOV AL,OFFH
7401 Ј2 $+3H
40 INC AX
50 PUSH AX 53
803Е710001 СМР T,1H
BOF F MOV АС, ОРРН
7401 Ј2 $+3H
10 ІМС АХ
22066900 AND AL,WORDMODE
59 POP СХ . 1
OAC! OR AL,CL
0008 АСА AL,1
728D JB NEWLINE
GOTO LOOP;
; STATEMENT # 460
2895 ЈМР LOOP
END;
STODISPLAY ENDP
ЗІОЗІМРОТ:
; STATEMENT # 462
/® THIS ROUTINE IMPLEMENTS THE ‘INPUT’ COMMAND. USER SPECIFIES
A PORT AND THE DATUM OF THE PORT 15 DISPLAYED. #/
SIOINPUT PROC NEAR
55 PUSH BP
8BEC MOV BP,SP
PROCEDURE;
DECLARE PORT WORD;
CALL SITO$TESTSWORDSMODE;
| ; STATEMENT # 464
ЕВОСЕВ CALL SITOTESTWORDMODE
PORT = SIO$GETSWORD;
; STATEMENT 9 465
ЕЗЦТЕЗ CALL STOGETWORD
A35600 MOV PORT, AX
LOOP:
; STATEMENT й 466
LOOP:
803Е66002С СМР CHAR, 2CH
7403 92 $+5Н
SO4AFS JMP ERROR
ТЕ CHAR<>',° THEN GOTO ERROR;
CALL SIO$CRLF;
; STATEMENT # 468
ЕЗЕЗЕ? CALL SIOCRLF
PAGE
цу
~
РО/М-86 COMPILER
SDK86 SERIAL MONITOR
469 2 IF WORD$MODE THEN
; STATEMENT й 469
ОСВЕ А06900 MOV AL,WORDMODE
occ2 0058 RCR AL, 1
OCC4 7308 JNB 877
470 2 CALL SIO$SOUT$WORD( INWORD(PORT));
; STATEMENT # 470
OCC6 8В155600 MOV DX,PORT
OCCA ED INW DX
ОССВ 50 PUSH AX : 1
ОССС E891F6 CALL SIOOUTWORD
ОССЕ ЕВ09 ЈМР 978
977; !
ELSE
471 2 CALL SIO$OUT$BYTE(INPUT(PORT));
‚ STATEMENT # 471
OCD1 88165600 MOV DX,PORT
0605 20 IN DX
9606 50 PUSH AX : 1
OCD7 585626 CALL SIOOUTBYTE
978:
472 2 CALL SIO$GET$CHAR;
; ЗТАТЕМЕМТ й 472
OCDA E832F5 CALL ЗІОСЕТСНАВ
473 2 ТЕ CHAR=ASCR ТНЕМ RETURN;
| ; STATEMENT # 473
осрр 803Е660000 CMP CHAR,ODH
ОСЕ2 75СЕ JNZ LOOP
; STATEMENT й 474
OCE4 5D POP BP
ОСЕ5 СЗ RET
475 2 GOTO LOOP;
476 2 END;
SIOINPUT ENDP
477 1 SIO$OUTPUT:
: STATEMENT й 477
/% THIS ROUTINE IMPLEMENTS THE ‘OUTPUT’ COMMAND.
DATUM IS OUTPUT TO THE SPECIFIED PORT. #/
51000ТРОЫТ PROC NEAR
OCE6 55 PUSH BP
ОСЕ? 8BEC MOV BP,SP
PROCEDURE;
478 2 DECLARE (DATUM,PORT) WORD;
479 2 CALL SIO$TEST$WORD$MODE;
; STATEMENT # 479
0СЕ9 ES8CCF7 CALL SLOTESTWORDMODE
480 2 PORT = STO$GET$WORD; |
; STATEMENT й 489
ОСЕС E801F8 CALL SIOGETWORD
OCEF A35A00 MOV PORT, АХ
481 2 ТЕ CHAR<>’,' THEN GOTO ERROR;
; STATEMENT % 481
ОСЕ2 803Е66002С CMP CHAR, 2СН
OCF7 7403 42 $+5H
ОСЕ9 ЕЗОАЄ5 JMP ERROR
483
го
CALL STO$GET$CHAR;
THE USER SUPPLIED
PL/M=-86 COMPILER
SDK86 SERIAL MONITOR
; STATEMENT
ОСЕС Е810Ғ6 CALL ЗІОСЕТСНАВ
484 2 LOOP:
: STATEMENT
LOOP:
DATUM = SIO$GET$WORD;
OCFF ES8EEFT7 CALL STOGETWORD
0002 А35800 MOV DATUM, AX
485 2 IF СНАВ=':’ THEN GOTO ERROR;
‚ STATEMENT
0005 803Е66003А СМР СНАВ,ЗАН
ODOA 7503 JNZ $+5Н
ODOC ЕЭРТЕЦ УМР ERROR
487 2 IF WORD$MODE THEN
; STATEMENT
ODOF 4006900 MOV AL,WORDMODE
0012 0008 RCR AL, 1
0014 730A JNB 882
488 2 OUTWORD(PORT) = DATUM;
STATEMENT
0016 8В165А00 MOV DX, PORT
001А | А15800 MOV AX, DATUM
0010 EF OUTW DX
001Е 2808 ЈМР 883
082
ELSE
489 2 00ТРЫТ(РОВТ) = LOW( DATUM);
; STATEMENT
0920 А15800 MOV AX, DATUM
0023 88165400 MOV DX,PORT
0027 ЕЕ OUT DX
983:
490 2 ТР СНАН-!," THEN
; STATEMENT
0028 803Е66002С СМР CHAR,2CH
0020 7516 JNZ е8ц
ц91 2 ро:
ц92 3 CALL SIO$CRLF;
ЗТАТЕМЕМТ
0D2F Е875Е7 CALL STOCRLF
493 3 CALL ФТОЗОЏТЗСНАА("-");
STATEMENT
0032 8020 MOV AL,2DH
0034 50 PUSH AX 8% 74
0035 Е8ВТҒ5 CALL STOOUTCHAR
494 3 CALL SIO$OUTS$BLANK; А
› ЗТАТЕМЕНТ
0038 E83CF6 CALL STOOUTBLANK
495 3 CALL SIO$GETSCHAR;
; STATEMENT
0038 E8D1F5 CALL SIOGETCHAR
496 3 IF CHAR <> ASCR THEN GOTO LOOP;
; STATEMENT
ООЗЕ 803Е66000р СМР СНАЯ, ООН
0043 75ВА JNZ LOOP
; STATEMENT
498 3 END;
483
485
487
488
490
494
495
497
РАОБ
46
РЫ/М-86 COMPILER SDK86 SERIAL MONITOR PAGE
439
509
507
508
509
511
512
w Г
084:
ЕНО;
; STATEMENT # 499
0045 5D POP BP
0046 C3 RET
STOOUTPUT ENDP
STO$WRITE:
; STATEMENT # 500
/% IMPLEMENTS THE PAPER TAPE WRITE COMMAND. OUTPUTS LEADING NULLS,
EXTENDED ADDRESS RECORD (8086 ONLY), START ADDRESS RECORDS
(8086 ONLY), DATA RECORDS, EOF RECORD, AND TRAILING NULLS. #/
ЗТОМАТТЕ РВОС МЕАВ
0047 55 РОЗН ВР
0048 8ВЕС МОУ ВР, ЗР
PROCEDURE;
DECLARE (START$REC,MODE$8085) BYTE, (LEN,INDEX) WORD;
CALL SIO$GET$CHAR;
; STATEMENT # 502
ООЧА E8C2F5 CALL ЗТОСЕТСНА К
MODE$8086 = TRUE;
; STATEMENT # 503
0040 C6067300FF MOV МООЕЗОЗ6, ОЕЕН
IF СНАВ-!Х" THEN и” TEST FOR 8080 MODE #/
; STATEMENT # 504
0052 803Е662058 CMP CHAR,53H
0057 7508 JNZ 986
DO;
MODE$8085 = FALSE;
; STATEMENT # 505
0059 66967500092 MOV MODE8086,0H
CALL SIO$GETS$CHAR;
; STATEMENT # 507
005Е ЕВАБЕ5 CALL ЗІОСЕТСНАВ
210;
286:
ТЕ CHAR=ASBL THEN CALL SIO$GET$CHAR;
; STATEMENT # 509
0061 803£660020 СМР CHAR, ФОН
0D66 7503 JNZ 887
; STATEMENT # 510
0068 ЕВАЦЕ5 CALL SIOGETCHAR
087:
CALL SIO$GET$ADDR(@ARG1,CS);
| ; STATEMENT # 511
0068 8р061А00 LEA AX,ARG1
OD6F 1E PUSH DS ; 1
0070 50 PUSH AX ; е
0071 FF364000 PUSH REGSAV+10H; 3
0075 Е86СЕ8 CALL STOGETADDR
ТЕ CHAR<>',* THEN GOTO ERROR;
; STATEMENT # 512
0078 803Е66002С СМР CHAR,2CH
0070 7403 JZ $+5H
ООТЕ EQ3UFY JMP ERROR
CALL SIO$GET$CHAR;
; STATEMENT # 514
47
РЬ/М-86 COMPILER
919
518
523
922
523
530
531
w ~
0082
0085
0088
0088
0085
0092
0094
9997
0096
0D9E
ЈОАЗ
ODA6
ODAA
ODAB
ODAC
0080
0083
0085
ODBA
орсо
00С5
О0С7
ODCA
оосо
0002
SDK86 SERIAL MONITOR
ЕВВАЕ5 CALL STOGETCHAR
ЕНОЗОЕЕ = SIO$GETS$WORD;
; STATEMENT # 515
E868F7 CALL STOGETWORD
A31800 MOV ENDOFF, AX
IF END$OFF<ARG1.OFF THEN GOTO ERROR;
; STATEMENT # 515
A11800 MOV АХ, ENDOFF
38061400 CMP АХ, АВС1
7303 JNB $+5H
ES6FF4 JMP ERROR
TF CHAR<>ASCR THEN
; STATEMENT # 518
803Е650000 СМР CHAR,ODH
7417 42. 290
00;
START$REC = TRUE;
; STATEMENT # 520
C6067200FF MOV STARTREC,OFFH
CALL 51030ЕТУСНАВ,
; STATEMENT # 521
E869F5 CALL STOGETCHAR
CALL SIOSGETS$ADDR(@ARG3,CS);
; STATEMENT # 522
80061500 LEA АХ ,АВОЗ
1Е PUSH DS 5. 4
50 PUSH AX : 2
ҒЕЗ64000 PUSH REGSAV+10H; 3
283128 CALL SIOGETADDR
END;
; STATEMENT # 523
ЕВОВ ЈМР 991
890:
ELSE
00;
START$REC з FALSE;
| ; STATEMENT # 525
0606720000 MOV STARTREC,OH
АВОЗ„ОЕР = 0;
: STATEMENT # 526
С706 15000000 MOV АНСЗ, ОН
END;
891:
ТЕ CHAR<>ASCR THEN GOTO ERROR;
> STATEMENT # 528
823Е560000 СМР CHAR,ODH
7403 JZ $+5H
293СЕ4 ЈМР ERROR
CALL SIO$CRLF;
; STATEMENT # 530
E8DAF6 CALL SIOCRLF
/% LEADING NULLS %/
STATEMENT # 531
DO I=1 TO 60;
C606689001 MOV ЕСЕН
0154:
30355890035 СМР 1,368
РАСЕ
48
PL/M-86 COMPILER SDX86 SERTAL MONITOR
2007 7700 ЈА 9155
532 3 CALL 510%00Т%СНАНВ(0);
; STATEMENT # 532
0009 8000 MOV AL,OH
008 50 PUSH AX к 1
900С E810F5 CALL STOOUTCHAR
933 3 END;
| ; STATEMENT # 533
ЈООЕ 8906630901 ADD I,1H
ODEY БЕС JNZ 9154
3155:
534 2 CALL SLOSCRUF:
; STATEMENT # 534
00Е6 ES8BEF6 CALL STOCRLF
535 2 те М00533086 THEN
> STATEMENT й 535
9059 А07300 MOV АС, МООЕЗОВБ
ODEC 0008 АСА AL ,1
ODEE 734E JNB 893
535 2 ро;
537 3 ТЕ 5ТАНТФНЕС THEN
; STATEMENT # 537
00983 407290 MOV AL,STARTREC
0023 0003 RCR AL, 1
0025 7328 JNB 834
538 3 00;
533 ü CALL STOSOUT$SHEADER(04¥,0,03); /# START ADDRESS RECORD #/
; STATEMENT # 539
ODF? 89008 МОМ AL,4H
ODF9 50 PUSH AX 8541
ОБРА 830000 MOV АХ, ОН
ODFD 50 PUSH AX . 2
00ЕЕ 8903 MOV AL, ЗН
0209 50 PUSH AX . 3
0Е21 888155 CALL 51900ТНЕАРЕН
549 u CALL SI9$OUT$wWORD(ARG3.,SEG);
; STATEMENT # 510
ОБОЦ ҒЕЗ62000 PUSH ARG3+2H ; 1
9508 285525 CALL STIOUTWORD
541 u CALL SIO$OUT$WORD(ARG3.0FS);
; STATEMENT # 541
ОБОВ ҒЕЗ61%00 PUSH ARG3 ; 1
ОЕОЕ ЕВЧЕЕ5 CALL STOOUTWORD
542 4 CALL STO$OUT$BYTE( CHECK$SUM);
“ STATEMENT й 542
2812 22356790 PUSH CHECKSUM; 1
0Е16 581755 CALL 5. sOUTBITE
543 4 CALL STI$SCRLE:;
| ; STATEMENT 9 543
0Е19 ЕЗӘВЕ5 CALL лежат.
544 u \493,. 2202 = 0;
2 ЗТАТЯМЕЧТ й 544
9817 $796 1209099) ЧОУ ат. ЗН
5 45 Ц 285;
394:
545 3 САБЫ S1299UT7%$4dSADSR 02,09,02); 75 EXTENDED 1п08035 ASCORD "7
PL/M-36 COMPILER
0Е22 8002 MOV AL,2H
0Е24 50 PUSH AX ‚1
ОБ25 890000 MOV Ct, ОН
0Е28 51 PUSH Cx ка
0229 50 PUSH AX . 3
ОЕ2А Е888Е5 CALL STOOUTHEADER
547 CALL STOSOUT$WORD(ARG1.SEG);
; STATEMENT # 547
0Е20 FF361C00 PUSH ARG1+2H ; 1
0Е31 E82CFS CALL STOOUTWORD
548 CALL 510300Т5ВҮТЕ(СНЕСКУ50М),
; STATEMENT Е 548
0Е34 FF366700 PUSH CHECKSUM; 1
0Е33 ЕЗЕЗЕЧ CALL STOOUTBYTE
549 3 CALL SIO$CRLF;
; STATEMENT Е 549
0Е38 E869F6 CALL STOCRLF
550 3 END;
893:
551 2 LEN = STANDARD$LEN; /% DATA RECORD h/
; STATEMENT # 551
ОЕЗЕ С7065С001000 MOV LEN, 10H
552 2 LOOP: INDEX = ЕМОЗОЕЕ ~ АНС1.ОРЁР,
; STATEMENT # 552
LOOP:
0Е44 А11800 MOV АХ, ENDOFF
2ЕШ7 28061А00 SUB AX, АВС
ОЕЧВ АЗ5ЕОО MOV INDEX, AX
553 2 ТЕ INDEX<STANDARD$LEN THEN LEN = INDEX + 1;
; STATEMENT # 553
ОБЧЕ 83F810 СМР АХ, ТОН
2651 7309 JNB 895
; STATEMENT # 554
0Е53 A15E00 MOV AX, INDEX
0256 83C001 ADD AX,1H
ОБ59 A35C00 MOV LEN,AX
895:
555 2 CALL STOSOUTS$SHEADER(LEN,ARG1.0OFF,00);
; STATEMENT # 555
ОБ5С FF365C00 PUSH LEN > 4
0Е60 FF361A00 PUSH ARG1 х 2
0Е64 8000 MOV АБ, ОН
0556 50 РУЗН АХ . 3
0Е67 ES4BFS САС. SIQOUTHEADER
556 2 DO ї=1 TO СЕН;
; STATEMENT # 555
0Е6А С506680001 MOV Ty ТИ
8156:
OE6F 406800 MOV AL, I
0Е72 B400 MOV АН, ОН
OE74 38065000 СМР AX,LEN
0673 7715 JA 2157
557 3 CALL ЗТОЗОПТВУТ Е ( МЕМОНУЗАНС 1);
ОЕТА
SDK86 SERIAL MONITOR
СЧТЕТАОО LES
; STATEMENT 6 546
; STATEMENT # 5
BX,MEMORYARGIPTR
л
З
РАСЕ
50
Р,/М-86 COMPILER
ОЕТЕ
0Е81
ОЕЗЦ
ОЕЗ9
ОЕВЕ
599 2
0Е90
OE94
501 2
0897
0Е9А
0Е90
ОЕАО
ОЁАЧ
564 2
ОБАб
OEA8
OEA9
OEAD
OEAF
ОЕВО
ОЕВЗ
ОЕВ?
566 2
ОЕВА
567 2
ОЕВО
0ЕС2
0ЕС7
568 3
0ЕС9
0ЕСВ
ОЕСС
569 3
ОЕСЕ
OEDY
570 2
SDK86 SERIAL MONITOR
26FF 37
ЕЗАСЕЦ
РОЗН ES:MEMORYARG1( BX]
CALI; SIOOUTBYTE
ARG1.OFF = АВСІ.ОЄЄ + 1;
; STATEMENT
83061A0001 ADD ARG1,1H
END;
; STATEMENT
3006680001 ADD I, 1H
75DF JNZ 8156
8157:
CALL SIO$OUT$BYTE(CHECK$SUM);
; STATEMENT
CHECKSUM; 1
SIOOUTBYTE
FF 366700 PUSH
E899F4 CALL
CALL 5104СБВЇР,
; STATEMENT
E80DF6 CALL STOCRLF
ТЕ END$OFF<>ARG1.OFF-1 THEN GOTO LOOP;
; STATEMENT
A11A00 MOV АХ, АВС 1
ВЗЕВО 1 508 АХ, 1H
39061800 СМР ENDOFF, AX
7996 JNZ LOOP
CALL SIO$OUT$HEADER(00,ARG3.0FF,01);
; STATEMENT
В000 моу АС, ОН
50 PUSH AX ; 1
FF361E00 PUSH ARG3 ; 2
8001 MOV AL, 1H
50 PUSH AX ;
E302F5 CALL SIOOUTHEADER
CALL ЗТОЗОПТЗВУТЕ ( CHECK$SUM) ;
; STATEMENT
CHECKSUM; 1
ЗТООЦТВУТЕ
#е366700 PUSH
Е?758Ң4 CALL
CALL SITOSCRLF;
; STATEMENT
ЕЗЕАҒ5 CALL
00 1-1 TO 60;
STICRLE
; STATEMENT
C606680001 MOV Ly Va
8158:
803Е68003С СМР I, 3CH
7790 ЈА 4159
CALL SLOSOUT$CHAR(0O);
; STATEMENT
8000 MOV АГ, ОН
50 PUSH AX . 1
E820F4 CALL ЗТООПТСНАВ
ЕНО;
; ЗТАТЕМЕНТ
800668000 1 АОО 1,124
75ЕС JNZ 8158
8159:
END;
# 558
# 559
# 560
# 561
# 562
/% EOF RECORD #/
Е 564
/% TRAILING NULLS #/
Е 56?
# 568
Е 569
PL/M-36 COMPILER 50К85 SERIAL MONITOR PAGE 52
; STATEMENT # 570
0506 50 POP BP
0Ер7 СЗ RET А
г STOWRITE ANDP
571 ! ЗТОЗВЕАО:
; STATEMENT # 577 і
/8 [MPLEMENTS THE READ PAPER ТАРЕ COMMAND. %/
SIJREAD PROC МЕАН
0Е08 55 РЈ5Н ВР
2Е09 ЗВЕС MOV ЗР,5Р
PROCEDURE;
572 2 DECLARE BIAS WORD, (REC$TYPE,LEN,I,T) BYTE, OFFSET WORD;
573 2 BIAS = 9; /а DEFAULT BIAS #/ i
; STATEMENT # 573 \
0208 с70660000000 MOV ЗІАЗ,ОН #
574 2 ARG1.SEG з 0; /9 DEFAULT CS FOR 3080 FORMAT FILE #/ |
; STATEMENT # 574
ОЕЕ1 С7061С000000 MOV ARG1+2H,0H
575 2 CALL SIO$SCAN$BLANK;
; STATEMENT # 575
ОБЕ? ЕВЕЦЕ5 CALL STOSCANBLANK
575 2 IF CHAR<>ASCR THEN BIAS = 513308 Т3чО8НО,
; STATEMENT # 576
ОБЕА 303Е660000 CMP СНАВ, Ора
ОЁЕР 7406 17 897
; STATEMENT # 577
ОБР) E8FCFS САБЫ STOGETWORD
ОБЕЦ А35000 MOV 4145,АХ | 2
097: !
573 2 ТЕ CHAR<>ASCR THEN 5079 ERROR; |
; STATEMENT # 578
ОБЕ? 803Е660000 CMP СНАВ, ООН
QEFC 7403. 1% 5454
ОБЕРЕ £E905F3 JMP ERROR
580 2 CALL STO$CRLF;
; STATEMENT 4 580
OFO1 ЕЗАЗЕ5 CALL SIOCRLF
581 2 LOOP:
; STATEMENT # 581
LOOP:
OFO4 E87BF7 CALL ЗТОЯБАОСНАЯ
0207 3СЗА СМР AL, ЗАН
0209 75Ғ9 JNZ СООР
DO WHILE SIO$READ$CHAR<>':';END; š
583 2 CHECK$SUM = 0;
; STATEMENT # 583
OFOB C606670000 MOV CHECKSUM,OH
584 2 LEN = SIO$READ$BYTE; А
; STATEMENT # 584
OF10 ЕЗВАЄТ CALL SIOREADBYTE
OF 13 427500 MOV LEN,AL
535 2 OFFSET = SIO$READ$WORD;
; STATEMENT # 585
OF 15 E8DFF7 CALL SIOREAOWORD
0Р19 А36200 MOV OF FSET,AX
586 2 ARG1.OFF = OFFSET + BIAS;
PL/M-86 COMPILER
597
588
589
590
591
594
598
299
50480 SERIAL MONITOR
; STATEMENT # 585
A16200 MOV AX,OF FSET
03066000 ADD AX, BIAS
A31A00 MOV ARG1,AX
REC$TYPE = SIO$READSBYTE;
‚ STATEMENT # 587
ЕВАЦЕ? CALL SIOREADBYTE
A27400 MOV RECTYPE,AL
IF REC$TYPE=03 THEN /* START ADDR ТУРС #/
: STATEMENT # 588
80 3E740003 CMP RECTYPE, 3H
750C JNZ 999
DO;
CS = SIO$READ$WORD;
$ STATEMENT # 592
E8C2F7 CALL STOREADWORD
A34000 MOV REGSAV+10H, АХ
ТР = SLO$READ$WORD;
: STATEMENT # 591
ЕЗВСЕ? CALL 51385АОМОНО
A34800 MOV REGSAV+18H, АХ
END;
899:
ТЕ ВЕСЗТУРЕ=02 THEN /% EXTENDED ADDR TYPE #/
; STATEMENT 4 593
803E740002 CMP RECTYPE, 2H
7506 JNZ 2109
ARG1.SEG = SIO$READ$WORD;
; STATEMENT # 594
E8AFF7 CALL SITOREADWORD
АЗІСОО МОУ ARG1+2H,AX
0100:
ТЕ ВЕСЗТУРЕ = 01 THEN /* EOF %/
STATEMENT # 595
8235740001 СМР RECTYPE, 1H
7500 JNZ 0101
IF OFFSET <> 0 THEN IP = OFFSET;
; STATEMENT # 596
833Е620000 СМР ОЕЕЗЕТ , ОН
7406 JZ 8101
; STATEMENT 4 537
А15200 MOV АХ, ОРЕЗЕТ
A34800 MOV REGSAV+18H,AX
2101:
ТЕ REC$TYPE=00 THEN /а DATA ТУРЕ ?/
; STATEMENT # 593
823E740000 CAP КЕСТҮРЕ, ОН
93:7 JNZ 9103
DO 141 ТО БЕН:
; STATSMENT # 599
C605760001 MOV Г, 1Н
2162:
407520 MOV 41,1
34067509 САР ВЫ РОВ
7729 JA 4193
Т, МЕМОВУЗАЯС 1
х ST2$RSADSBYUS
STATS Те и
.
,
«І
Па
PL/M-86 COMPILER
601
603
604
605
606
608
0275
0278
ОР7В
ОР7Р
0Е82
0Е86
0289
OF8D
0F8F
0F92
0297
02960
ОР9Е
ОРАТ
ОРАЦ
ОРА
ОРАВ
ОЁАЕ
OFB3
OFBS
0ЕВ7
ОЕВ8
ОЕВ9
ОЕВЕ
ОРСО
0ЕС2
ОРСЗ
ОРСЧ
0206
ОРСВ
ОРСА
OFCD
ОЕСЕ
OFDO
OFD3
0205
ОЕО6
0ЕРр9
SDK86 SERIAL MONITOR
ES55F7 CALL STIREADBYTE
A27700 MOV T,AL
С41Е1А00 LES BX,MEMORYARGIPTR
268807 MOV ES:MEMORYARG1(BX],AL
IF MEMORY$ARG1<>T THEN GOTO ERROR;
; STATEMENT # 501
СЦ1ЕТАОО LES BX,MEMORYARGIPTR
268А07 MOV АС , 53 : МЕМОВУАНС 1 BX]
33067700 СМР AL,T
7403 Ј2 3558
£974F2 JMP ERROR
АЯС1,О0ЁР = ARG1.OFF + 1;
; STATEMENT # 603
8306140001 ADD АЯС1,1Н
END;
; STATEMENT # 504
8006760001 ADD ТЕТЯ
75СЕ JNZ 9162
8103:
T = SIO$READ$BYTE; /% PETCH CHECKSUM %/
; STATEMENT # 695
Е82СЕ7 CALL SIOREADBYTE
A27700 MOV T, AL
ТЕ CHECK$SUM<>0 THEN GOTO ERROR;
; STATEMENT # 606
823£670000 CMP CHECKSUM, ОН
7403 97 $+5H
E958F2 JMP ERROR
IF REC$TYPE<>01 AND LEN<>9 THEN GOTO LOOP;
; STATEMENT # 003
8038780001 СМР АЕСТҮРЕ,1Н
BOFF MOV AL,OFFH
1501 JNZ $+3H
40 INC AX
50 PUSH AX 21
823Е750000 СМР LEN,OH
BOFF MOV AL,OFFH
7501 JNZ $+3H
40 INC AX
59 РОР CX 4-1
2201 АНО АБ, CL
0008 RCR AL, 1
7303 JNB $+5H
Е93ТЕҒ ЈМР LOOP
CALL ЗТОЗОЏТЗСНАА(О); /% DELAY FOR LAST CR, LF SENT %/
; STATEMENT # 610
8000 MOV АЫ, ОН
50 PUSH AX 21
Е81СРЗ CALL STOOUTCHAR
CALL ФТОЗОЏТЗСНАА(О); /% BY INTELLEC */
; STATEMENT # 611
8009 MOV AL,OH
50 PUSH AX ; 1
5816Ғ3 CALL | SIQOUTCHAR
END;
; STATEMENT # 612
5D POP BP
PAGE
54
PL/M-86 COMPILER
613
614
615
616
617
618
619
620
OFDA
00А8
0049
OOAE
0081
0083
0088
0089
00ВА
008D
ООВЕ
00C0
00C2
00C3
00C5
00C6
ООСВ
0000
00D2
00D6
00D8
00DC
OODF
00Е0
00Е5
00Е7
ООЕА
50К86 SERIAL MONITOR
C3 RET
STOREAD ENDP
/9544808060(239088088288808899404080848 аа 080 6 0: 208 000
8 COMMAND DISPATCH MAIN PROGRAM LOOP ы
озоесовенововозевевововеневовевонаонававев /
# 613
Е 614
Е 615
Е 616
# 617
# 618
# 619
DISABLE;
; STATEMENT
FA СЕТ
2E8E16A400 MOV 55,С5:885ТАСКФЕНАМЕ
BC4200 MOV SP, @@STACK$OFFSET
ВВЕС MOV ВР,5Р
2E8E1EA609 MOV DS,CS: @@DATA$FRAME
FB 8ТІ
ҒА CLI
OUTPUT(KB$STAT$PORT) = KB$INIT$MODE;
; STATEMENT
BAEAFF MOV ОХ, ОЕЕЕАН
8000 MOV AL,OH
EE OUT DX ;
OUTPUT(KB$STAT$PORT) = KB$INIT$SCAN;
; STATEMENT
8039 MOV AL,39H
EE OUT DX
OUTPUT(KB$STAT$PORT) = 90H; /% OUTPUT "8086"
; STATEMENT
8090 MOV AL,90H
EE OUT DX
DO I=0 TO 7;
; STATEMENT
С606680000 MOV 1,0Н
0164:
893Е68 0007 СМР I,7H
7715 ЧА 0165
OUTPUT(KB$DATA$PORT) = KB$SIGNON(L);
; STATEMENT
8A1E6800 MOV BL,I
B700 MOV BH,OH
2ЕВАЦТАВ MOV AL,CS:KBSIGNON[ BX]
ВАЕВЕЕ MOV ОХ, ОЕЕЕВН
ЕЕ OUT DX
END;
; STATEMENT
8006680001 ADD I,1H
75E4 JNZ 8164
0165:
/* THIS STRANGE SEQUENCE OF CODE IS USED ТО GUARANTEE CORRECT USART
INITIALIZATION AFTER EITHER: 1) HARDWARE RESET (EXPECTING MODE)
2) SOFTWARE RESTART (EXPECTING COMMAND).
OUTPUT(SIO$STAT$PORT)
ВАЕФЕЕ MOV
SI0$8251$RESET;
; STATEMENT
DX,OFFF2H
8065 MOV AL,65H
# /
# 620
SIGNON BACKWARDS */
PAGE
29
Р,/М-86 COMPILER SDK86 SERIAL MONITOR PAGE 55
OOEC EE OUT DX
621 1 CALL STO$8251$SETTLING$DELAY;
; STATEMENT # 621
00Ер E8E902 CALL STO8251SETTLINGDELAY
622 1 ОЏТРОТ( 5103 5ТАТЗРОНТ) = 25H;
; ЗТАТЕМЕНТ # 622
OOFO BAF2FF MOV ОХ, ОРРР2Н
ООРЗ 8025 MO V AL,25H
OOFS EE OUT DX
623 1 CALL STO$8251$SETTLINGS$DELAY;
; STATEMENT # 623
00Ғ6 Е8ЕО02 CALL STO8251SETTLINGDELAY
624 1 OUTPUT(SIOSSTATSPORT) = SIO$8251$RESET;
; STATEMENT # 624
ООР9 ЗАР2?Р MOV DX,OFFF2H
ООРС 8065 MOV AL,65H
00РЕ ЕЕ OUT DX
625 1 CALL SIO$8251$SETTLINGS$DELAY;
; STATEMENT # 625
ООРЕ Е80702 CALL SIC8251SETTLINGDELAY
626 1 OUTPUT(SIO$STATS$PORT) з STO$8251$MODE;
; STATEMENT # 626
0102 BAF2FF MOV DX,OFFF2H
0105 ВОСЕ MOV AL,OCFH
0107 EE OUT DX
627 1 CALL STO$8251$SETTLINGS$DELAY;
; STATEMENT # 627
0108 E8CEO2 CALL SIO8251SETTLINGDELAY
628 1 OUTPUT(SIO$STATS$PORT) = 3103825 13СМНО;
; STATEMENT # 628
0108 BAF2FF MOV DX,OFFF2H
0102 8025 MOV AL,25H
0110 ЕЕ OUT DX
629 1 CALL 5103825 143ЕТТ! ТНСЗОЕГАТ;
; ЗТАТЕМЕНТ # 529
0111 Е8С502 CALL STO8S251SETTLINGDELAY
6 30 1 CALL STO$SOUTSSTRING( @SIO$SIGNON) ;
; STATEMENT # 630
0118 2Е80062700 LEA AX,CS:SIOSIGNON
0119 OE PUSH cs ; 1
011А 50 PUSH AX ; 2
0118 Е86402 CALL STOOUTSTRING
/% INITIALIZE USER'S REGISTERS %/
631 1 С3,33,03,Е3,РЬ,ТР з 0;
; STATEMENT # 631
011Е 8В880000 MOV АХ, ОН
0121 A34000 MOV REGSAV+10H,AX
0124 A3Z4400 MOV REGSAV+14H,AX
0127 A318200 MOV REGSAV+12H,AX
012А A34600 MOV REGSAV+16H,AX
0120 АЗЧАОО MOV REGSAV+1AH,AX
0130 А34800 MOV REGSAV+18H,AX
632 1 SP = USER$INITS$SP;
; STATEMENT # 532
/9 INITIALIZE INTERRUPT VECTORS %/
PL/M-86 COMPILER
633
634
6 35
636
637
638
639
0133
0139
0130
ОТЗЕ
ОТЗЕ
0142
0143
0146
ОТЧА
0148
0146
014Е
0150
0153
0157
0158
0159
015C
015D
0160
0165
0167
016A
016C
016Е
0172
0174
0179
0170
О17Е
017F
0182
SDK86 SERIAL MONITOR PAGE
C70638000001 MOV REGSAV+8H,100H
CALL INITS$INT$VECTOR( @INT$VECTOR(1),.INTERRUPTI$SENTRY);
; STATEMENT # 633
80060400 LEA AX, INTVECTOR+4H
ТЕ PUSH DS ; 1
50 PUSH AX ; 2
B8DF07 MOV AX, ОРЕЗЕТ ( INTERRUPTIENTRY)
50 PUSH AX ; З
882807 CALL INITINTVECTOR
CALL INIT$INT$VECTOR( @INT$VECTOR(2),.INTERRUPT3$ENTRY);
; STATEMENT # 634
80060820 LEA AX, INTVECTOR+8H
1E PUSH DS ; 1
50 PUSH AX ; 2
885108 MOV AX, OF FSET( INTERRUPT3ENTRY)
50 PUSH AX ; 3
Е81Е07 CALL INITINTVECTOR
CALL INIT$INT$VECTOR( @INT$VECTOR(3),.INTERRUPT3$ENTRY);
; STATEMENT # 635
80060С00 LEA AX, INTVECTOR+0CH
ТЕ PUSH DS ; 1
50 PUSH AX. ; 2
885108 MOV AX, OFFSET( INTERRUPT3ENTRY)
50 PUSH AX . З
Е81107 CALL INITINTVECTOR
BRKI$FLAG = FALSE;
; STATEMENT # 636
C606640000 MOV BRK1FLAG,OH
MONITOR$STACKPTR = STACKPTR;
; STATEMENT # 637
89E0 MOV AX,SP
A31400 MOV MONITORSTACKPTR, AX
MONITOR$STACKBASE = STACKBASE;
; STATEMENT 4 538
8CDO MOV AX,SS
A31600 MOV MONITORSTACKBASE, AX
NEXT$COMMAND:
; STATEMENT # 539
/* THIS IS THE PERPETUAL COMMAND LOOP WHICH DISPATCHES TO EACH
COMMAND WHICH IS A SEPARATED PROCEDURE. %/
NEXTCOMMAND:
BC4200 MOV SP,@@STACK$OFFSET
8BEC MOV BP,SP
2E8E1E£A600 MOV 0$ , СЗ: @@DATA$FRAME
CALL SIO$CRLF;
E82B03 CALL SIOCRLF
CALL SIO$OUT$CHAR(O);
; STATEMENT # 610
В000 MOV АБ, ОН
50 PUSH AX ; 1
E86D01 CALL SIOOUTCHAR
CALL SIO$OUT$CHAR('.');
; STATEMENT # 641
BO2E MOV AL,2EH
57
PL/M-86 COMPILER
SDK86 SERIAL MONITOR
0188 sO PUSH AX ; 1
0185 £86701 CALL SIOOUTCHAR
642 1 CALL SIO$GETS$CHAR;
; STATEMENT #
0188 £88401 CALL ЗІОСЕТСНАЯ
643 1 DO 120 ТО LAST(SIO$CMND);
; STATEMENT 4
0188 С606680000 MOV I,0H
@166:
0190 803Е680009 СМР 1,9Н
0195 776Е ЈА ERROR
644 2 ТЕ CHAR=SIO$CMND(I) THEN GOTO DISPATCH;
; STATEMENT #
0197 A06600 MOV AL, CHAR
019A 3А126800 MOV BL, I
019E B700 MOV BH, ОН
01А0 2ЕЗАЧТЦЕ CMP AL,CS:SIOCMND( BX]
0144 7409 47 DISPATCH
646 2 END;
; STATEMENT #
0146 8006680001 ADD 1,1Н
ОТАВ 75Е3 4472 2166
647 1 GOTO ERROR;
; STATEMENT #
ОЛАр 2857 ЈМР ERROR
638 1 DISPATCH:
: STATEMENT #
DISPATCH:
LAST$COMMAND = Т;
ОТАЕ 406800 MOV AL, I
0182 A26A00 MOV LASTCOMMAND, AL
649 1 DO CASE I;
; STATEMENT #
0185 8500 МОУ АН,ОН
0187 8963 MOV BX,AX
0189 D1E3 SLL BX, 1
0188 2EFFAT7F201 JMP CS:@168( ВХ]
650 2 CALL SIO$EXAM$MEM;
; STATEMENT 8
@109:
01СО £86307 CALL SIOEXAMMEM
ОТСЗ ЕВАА JMP NEXTCOMMAND
651 2 CALL ЗТОЗЕХАМЗ ВЕС;
; ЗТАТЕМЕНТ і
8110:
0105 £83£08 CALL SIOEXAMREG
0108 ЕВА5 JMP NEXTCOMMAND
652 2 CALL SIO$GO;
; STATEMENT #
8111:
ОТСА Е8С506 CALL 51060
01CD ЕВАО ЧМР NEXTCOMMAND
653 2 CALL SIO$SINGLESSTEP;
; STATEMENT #
9112:
ОТСЕ Е82р07 CELL SIOSINGLESTEP
0102 ЕВ9В JMP NEXTCOMMAND
642
643
644
646
647
648
649
652
653
PAGE
58
PL/M-86 COMPILER SDK86 SERIAL MONITOR
655
057
661
662
1
1
CALL SIO$MOVE;
; STATEMENT # 654
@113:
0104 E87E09 CALL 510МОҮЕ
0107 ЕВ96 ЈМР МЕХТСОММАНО
CALL SIO$DISPLAY;
; STATEMENT # 655
0114:
0109 ЕЗОАОА CALL STODISPLAY
910С 2891 ЈМР NEXTCOMMAND
CALL SIO$INPUT;
; STATEMENT # 656
0115:
010Е Е8С5ОА CALL STOINPUT
ОТЕ 1 ЕВВС ЈМР NEXTCOMMAND
CALL 510300ТРОТ,:
: STATEMENT # 557
8116:
0123 280008 CALL STOOUTPUT
0126 ЕВ87 JMP NEXTCOMMAND
CALL SIO$READ;
| ; STATEMENT # 558
6117:
01Е8 E8EDOC CALL STOREAD
012:
О1ЕВ 882 ЈМР NEXTCOMMAND
CALL ЗТОЗИНТТЕ;
; STATEMENT # 559
0118:
91Е0 Е85708 CALL SIOWRITE
ОТЕО ЕВЕ9 JMP @12
END;
; STATEMENT 4 560
8168:
0192 C001 DW 2109”
01Ғ% C501 DW @110
0126 САО1 ри 8111
01Е8 СЕ01 ры 8112
O1FA 0401 DW 0113
01FC 0991 ри 9114
ОТЕБ DEDI ри 3115
0200 2301 ри 0116
0202 Е801 ри 0117
0204 EDO! ри 2118
СОТО NEXT$COMMAND;
ERROR:
; STATEMENT # 562
/% THIS ROUTINE HANDLES ALL ERRORS DETECTED BY THE MONITOR AND
WILL OUTPUT THE ERROR PROMPT TO THE OUTPUT PORT. #/
ERROR:
0206 BC4%200 MOV SP,@@STACK$OFFSET
0209 ЗВЕС MOV BP,SP
0208 258Е1БА600 MOV DS,CS: @@DATA$FRAME
0219 8023 MOV AL,23H
0212 50 PUSH AX с 1
PAGE
59
21/м-86 COMPILER
565
666
667
568
0213
0216
0218
0218
0210
9222
0225
0227
0229
0226
0230
0233
0238
0238
023Е
023Ғ
0242
0245
0247
0238
0240
0248
0251
0252
0253
0256
0258
025А
025Е
025Ғ
0261
0265
0266
0268
026А
026C
026D
026Е
0270
50К86 SERIAL MONITOR PAGE
580900 CALL 51000ТСНАВ
CALL SIO$OUT$CHAR('#');
СОТО NEXT$COMMAND;
; ЗТАТЕМЕНТ # 663
2803 ЈМР 812
AFTERSINTERRUPT:
; STATEMENT # 664
/9 THIS ROUTINE IS CALLED AFTER AN INTERRUPT TO DISPLAY THE CS: IP
AND RESTORE THE BREAKPOINTED INSTRUCTION. #/
AFTERINTERRUPT:
BC4200 MOV 5Р,905ТАСКФОРЕЗЕТ
ВВЕС мом ВР, ЗР
2Е8Е1ЕА600 MOV DS,CS: 3@DATASPRAME
A06400 MOV AL, BRKIFLAG
рор8 АСЯ 41,41
7354 JNB 9119
ТЕ BRK1$FLAG THEN
DO;
MEMORYS$BRK1 = BRKI$SAVE;
; STATEMENT # 566
A06530 MOV AL,BRKISAVE
C4182200 LES ВХ, МЕМОВУВЕК 1РТА
268807 MOV ES: МЕМОЯТВЕК 1 ( ВХ), АГ.
BRK1$FLAG = FALSE;
; STATEMENT # 667
С6066%0000 MOV ВЯК 1ЕТ АС , ОН
ТР ((ІР-1) AND OOOFH)=(BRK1.0FF АМО ОООРН) AND
; STATEMENT 9 668
А14809 MOV AX, ВЕСЗАУ + 1 8Н
ВЗЕВО 1 SUB AX, 1H
50 PUSH AX ; 1
250F00 AND АХ,ОЕН
ВВОЕ2200 MOV CX, ВЕК 1
51 PUSH cx ; 2
81£10F00 AND СХ,ОРН
3ВС1 СМР АХ, Cz
BOFF MOV А.,ОРЕН
7401 42 $+3Н
40 INC AX
SA POP DX ; 2
8756ҒЕ XCHG 0Х,ГВ8Р1-2Н: 1
8104 MOV CL,4H
ОЗЕА SHR ох, et
03164000 ADD DX,REGSAV+10H
58 POP BX : 1
ОЗЕВ SHR at CL
031Е2400 ADD BX, ВЯК 1+2
50 PUSH AX ЭР
3803 СМР рх. вх
ВОЕЕ MOV AL,OFFH
7401 32 $+3H
40 INC AX
59 POP CX ; 1
2201 AND AL; ÈL
0003 RCR АС, 1
60
PL/M-86 COMPILER
0272
669 2
679 3
0274
671 | 3
0279
027Е
027Е
0280
672 3
673 2
674 1
0283
9285
0286
675 1
0289
0280
676 1
0290
0292
0293
677 1
0296
029А
673 1
0290
579 1
50К86 SERIAL MONITOR
730F JNB 9119
(5Н8(1Р-1,3)-051)-(5НЯА(ВКК1.0СЕ,4)-38К1.,511)
ро;
ТР з TP - 1;
: STATEMENT # 572
832E480001 SUB REGSAV+18H,14H
CALL SIO$OUTSSTRING( @SIO$BREAK$MSG);
STATEMENT # 671
,
2Е8 0062300 LEA AX,CS:STIBREAKMSG
ОЕ РЈ5Н cs . 1
50 PUSH АХ . 2
ESFFOO CALL STIOUTSTRING
END;
END;
2113:
CALL SITO$OUT$CHAR('@'); |
; STATEMENT 8 67Ц
8040 MOV АС, ЦОН
50 РУЗН АХ ; 1
E86500 CALL STOOUTCHAR
CALL SITO$OUT$WORD(CS);
Ov
ч
мл
і ; STATEMENT і
FF 354000 PUSH REGSAV+10H; 1
E8D000 CALL STIOVTWORD
CALL SIO$OUTS$CHAR(':');
; STATEMENT Е 576
ВОЗА MOV AL, ЗАН
59 PUSH AX # 1
£85909 CALL STOOUTCHAR
CALL ЗТОЗОИТФИОНО (ТР);
; STATEMENT # 577
REGSAV+18H; 1
ЗТООИТИОКО
ЕҒЗ68800 PUSH
E8C300 CALL
GOTO NEXTECOMMAND;
; STATEMENT f 573
Е9СЕҒЕ ЈМР NEXTCOMMAND
END MONITOR; 79 END OF MODULE %/
БОР
-..
ла
PAGS
Р /М-86 COMPILER
50К86 SERIAL MONITOR
CROSS-REFERENCE LISTING
DEFN
664
169
11
11
10
10
10
51
572
15
ADDR
0218H
0000H
ООТАН
ООТЕН
ООЗЕН
0008H
0060H
FHFFF6H
ЕНЕРЕВН
РНРРРОН
РНРРЕ1Н
РНРЕРЗН
0000H
SIZE
NAME,
ATTRIBUTES,
AND REFERENCES
AFTERINTERRUPT
ARG
АНС1
ARG3
ASBL
ASCII
ASCR
BIAS
BLOCK8089
BLOCKSO89PTR
BOOT!
BOOT2
80073
BOOTY
BP
LABEL
277
STRUCTURE BASED( PTR)
170 171 175 175
STRUCTURE АТ
318 351 352 354 304
432 538 444 449 451
516 547 552 555 558
603
STRUCTURE АТ
414 424 522 526 540
LITERALLI
88 53 125 130 599
BYTE ARRAY(16) DATA
53 54 86 87
LITERALLI
118 160 191 266 290
360 387 390 394 415
518 528 576 578
LITERALLI
115
ВУТЕ PARAMETER AUTOMATIC
52 53 55 55
WORD
573 577 586
WORD AT INITIAL ABSOLUTE
809
454
562
541
298
431
POINTER AT INITIAL ABSOLUTE
BYTE
WORD
WORD
SORD
LITERALLY
245
ARRAY(1)
ARRAY(1)
ARRAY(1)
ARRAY(2)
DATA
421
455
574
544
329
340
АТ INITIAL АЗЗОСУТЕ
AT INITIAL ABSOLUTE
АТ INTTTAL ABSOLUT=
423
457
585
564
334
473
430
511
594
348
495
Р /М-86
11
92
36
105
11
478
168
195
COMPILER
0022H
0064H
0065H
OOO4H
ОООЧН
0006H
0004Н
0066H
0026H
0058H
0004Н
9053H
SDK86 SERIAL MONITOR
BREAKINST
BRK 1
BRKIFLAG
BRKISAVE
C1
C2
CHAR
CHECKSUM
COPYRIGHT
CORRECTION
cS
CSIP
DATUM
ОБРАЦСТВАЗЕ
DELAY
LITERALLY
293 294
STRUCTURE AT
289 668
BYTE
296 636 664
BYTE
292 666
BYTE PARAMETER
93 94 95
BYTE PARAMETER
37 42
BYTE PARAMETER
106 108
BYTE PARAMETER
106 108
BYTE
23 24 25
100 120 125
162 163 172
286 290 298
360 376 378
431 434 440
504 509 512
55 76 218
BYTE ARRAY(19)
LITERALLY
282
LITERALLY
188 192 318
675
STRUCTURE АТ
184 185 192
311
WORD
484 488 489
WORD PARAMETER
169 170
WORD
197 199 200
667
AUTOMATIC
96
AUTOMATIC
AUTOMATIC
AUTOMATIC
28 29
130 138
177 191
308 319
387 399
166 %73
618 528
542 548
DATA
404 414
261 262
AUTOMATIC
33
143
210
329
394
481
576
560
47
153
212
331
405
485
578
565
301
48
154
259
334
411
490
644
583
522
302
PAGE
49
160
266
348
415
495
606
668
63
PL/M-86
648
652
12
157
16
16
16
16
12
34
358
COMPILER
ОТАЕН
00138 г
0206Н
0581H
ЕНЕРОВН 5
РНРЕЕОН 16
РНРРР5Н 1
РНРРРСН 3
0008H 1
0070H 1
0076H 1
50К86 SERTAL MONITOR
DISPATCH
DOUBLE
05
ENDOFF
ERROR
25
EVAL
"з
LABEL
545
BUILTIN
95 95
LITSRALLY
631
WORD
408 409
515 552
LABEL
30 34
299 309
406 310
482 486
LITERALLY
531
LABEL
147
LITERALLY
15
LITERALLY
19 90
421 432 437
562
152 164 178
320 335 340
412 416 429
513 517 529
193 111 118
РАСЕ 64
438 449 454 515
203 267 291 295
355 375 379 331
435 439 441 567
579 532 637 647
506 525 635 667
BYTE ARRAY(5) АТ INITIAL ABSOLUTE
BYTE ARRAY(16)
AT INITIAL ABSOLUTE
BYTE ARRAY(1) АТ ТМТТТАС ABSOLUTE
BYTE ARRAY(4)
393 312 631
BYTE PARAMETER AUTOMATIC
LITERALLY
254 263
LITERALLY
85 87
BUILTIN
59
BYTE
363 365
396 398
BYTE
599
366 368 359
399
AT INITIAL ABSOLUTE
389 393 392 394
Р /М-86
280
248
270
279
COMPILER
0068H
ООБЕН
0871Н
0095Н
0005Н
ОТОЕН
08518
0004Н
0000H
00064
001BH
50К86 SERIAL MONITOR
2 INDEX
33 INITINTVECTOR
15 INITINTVECTORCODE
2 INITINTVECTORCODEPTR
INPUT
114 INTERRUPTIENTRY
57 INTERRUPTZENTRY
2 INTROUTINEOFFSET
20 INTVECTOR
4 INTVECTORPTR
INWORD
TP
КВРрАТАРОНТ
KBINITMODE
KBINTITSCAN
8 KBSIGNON
KBSTATPORT
LAST
BYTE
67 68 69 70 82 86 87 99
229 230 240 242 531 556 567 617
643 644 548 649
WORD
Boe 533 359
PROCEDURE STACK=000EH
533 934 635
BYTE ARRAY(15) DATA
280
WORD DATA
281
BUILTIN
18 23 28 40 45 47 198 207
PROCEDURE INTERRUPT(1) STACK=0026H
633
PROCEDURE INTERRUPT(3) STACK=0014H
634 635
WORD PARAMETER AUTOMATIC
280 282
POINTER ARRAY(5)
633 634 635
POINTER PARAMETER AUTOMATIC
280 281 282
BULLTIN
470
LITERALLY
183 185 309 631 668 679 677
LITERALLY
518
LITSRALLY
614
LITERALLY
515
BYTE ARRAY(8) SATA
613
LITERALLY
514 515 516
BUILTIN
PAGE
100
618
471
6 5
PL/M-86 COMPILER
та
73
73
552
196
66
8445
484
581
11
11
11
11
ООбАН
005СН
0075Н
00088
00068
OBAEB
OE SSH
96858
освен
0C3BH
ОСРРН
ОРОЗН
0000Н
ООТАН
0000H
ООТЕЧ
50К86 SERIAL MONITOR
LASTCOMMAND
LEN
LEN
LENGTH
LOADADDOR
LOOP
LOOP
LOOP
LOOP
LOOP
LOOP
LOOP
LOW
MAXDELAY
МЕМОЯТАЯС 1
MEMORYARGIPTR
MEMORYARG3
MEMORYARG3PTR
86 643
BYTE
255 648
WORD
551 554 555 555
BYTE
584 599 608
BYTE PARAMETER AUTOMATIC
78 Т?
WORD PARAMETER AUTOMATIC
7% 78
LABEL
425
LABEL
563
LABEL
211
LABEL
875
LABEL
460
LABEL
497
LABEL
609
BUILTIN
60 216 217 383 33% 589
LITERALLY
200
BYTE BASED(MEMORYARGIPTR)
325 383 344 318 319 453 557 500
POINTER
11 324 325 333 339 343 344 418
448 453 557 600 601
BYTE ВАЗЕЮ ( МЕМОКТАЯСЗРТЯ \
418 319
POINTER
11 418 419
РАЈЕ 3)
691
Р /М-86
11
11
11
11
11
11
11
501
639
11
11
11
11
11
169
COMPILER
0000H
0022H
0000H
0026H
0000H
ООФАН
0000H
0073H
ООАВН
0016H
0014Н
0C31H
016FH
00004
0900Н
0000Н
0000Н
0000H
0000H
1
504
SDK86 SERIAL MONITOR
MEMORY BRK1
MEMORYBRKIPTR
MEMORYCSIP
MEMORYCSIPPTR
MEMORYUSERSTACK
MEMORYUSERSTACKPTR
MEMORYWORDARG1
МОПЕЗОВ6
MONITOR
MONITORSTACKBASE
MONITORSTACKPTR
NEWLINE
NEXTCOMMAND
vere
ОБЕ
ОБЕ
OFF
OFF
ОЕЕ
BYTE BASED(MEMORYBRK1PTR)
292 293 294 666
POINTER
11 292 293 294 666
BYTE BASED(MEMORYCSIPPTR)
188
POINTER
11 188
WORD BASED(MEMORYUSERSTACKPTR)
227 230 242 245
POINTER
11 227 230 242 245
WORD BASED(MEMORYARGIPTR)
324 338 339 448
BYTE
503 506 535
PROCEDURE STACK=0042H
WORD
252
WORD
251
LABEL
459
LABEL
268
WORD
185
WORD
228
WORD
668
WORD
424
WORD
351
44g
562
WORD
171
274 638
274 537
661 663 578
МЕМВЕН ( СЗТР )
251 301 310
MEMBER(USERSTACK)
231 234 239 241 244 245 249
МЕМВЕВ (ВАК Т)
МЕМВЕВ ( АКСЗ)
526 541 544 564
MEMBER(ARG1)
352 354 409 421 423 432 438
451 454 456 457 5
586 603
л
—+
с
MEMBER( ARG)
178 176
PAGE
ц
558
PL/M-36
280
272
134
478
463
168
65
274
14
236
43"
COMPILER
0000H
00629
006BH
ООБАН
0056H
0006H
00048
0074H
0004Н
0058H
002ЕН
ООТЦН
0030H
9766H
JOTEN
3904Ч
2
2
28
28
96
SDK86 SERIAL MONITOR
OFF
OFFSET
OPER
OUTPUT
OUTWORD
PORT
PORT
PTR
PTR
RECTYPE
RECTYPE
REG
REGINDEX
REGORD
ВЕСЗАУ
RESTOREEXECUTE
ASS TIRSEL ЛЕ,
RESTORE EXECUTECOOE
WORD MEMBER(VECTOR)
603
399
227
281
313
599
282
WORD
585 586 596 597
BYTE
135 157 163
BUILTIN
42 196 202 206 489
620 622 624 626 628
BUILTIN
488
WORD
180 488 339
ЧОНО
465 370 471
POINTER PARAMETER AUTOMATIC
169 170 171 175. 175
POINTER PARAMETER AUTOMATIC
66 68 69
BYTE
587 588 593 595 598
BYTE PARAMETER AUTOMATIC
74 79
ВҮТЕ ARRAY(28) РАТА
100 108 365 366 398
WORD
107 108 145 380
BYTE ARRAY(11) DATA
230 242
WORD ARRAY( 14)
145 133 184 185 192
238 239 242 245 254
302 303 310 31! 312
404 414 430 511 522
632 668 570 675 577
PROCEDURE 5ТАСК:2023Ч
256 264 39% 313
BYTE АЗААҮ(22) GATA
237
WORD DATA
230
262
353
591
234
301
392
531
ai
PL/M-35
358
11
11
280
169
81
7
17
9715H
0002H
0002H
0092H
0002H
0902H
0002H
0002H
93D9H
9023H
О2АОН
81
14
19
50836 SERIAL MONITOR
SAVE
SAVE
SAVEREGISTERS
SEG
SHL
SHR
ТО 825 1СМНО
5190825 10ТАОМ
5108251М00Е
3128251ЧЕЗЕ7
SI08251SETTLINGDELAY
ЗТОВКЕАКМ5 3
STOCHARRDY
246
WORD
389 392
WORD
139 145 149 154 158
PROCEDURE STACK=9002H
293 275
WORD MEMBER(USERSTACK)
233 238 246 250 272
WORD MEMBER(CSIP)
184 262 299 39 571
WORD МЕМВЕВ( ВНК 1)
668
WORD МЕМВЕВ(АВОЗ)
540
WORD МЕМВЕН ( УЗСТОВ )
281
МОВО MEMBER(ARG1)
547 574 594
WORD MEMBER( ARG)
170 175
BUILTIN
154 217 224
BUILTIN
53 82 568
LITERALLY
202 206 528
LITERALLY
196
LITERALLY
626
„т АД ШҮ
520 524
PROCEDURE З5ТАСКа" 392
621 523 525 Да? 4 17
BYTE ARRAY(H) DATA
671
PROCEDURE BYTE
ЭЛ АСК ЈЕ.
59
РО/М-86 COMPILER
22
427
237
168
44
133
284
92
462
402
62
54
02838
ООЧЕН
ОЧА?Н
OBE6H
0926H
0А06Н
O5E4H
ОЗОЕН
ОЦЕОН
0892H
0416Н
OCA6H
0855Н
0377Н
0330Н
60
192
224
229
65
33
244
109
27
64
48
SDK86 SERIAL MONITOR
STOCHECKCONTROLCHAR
STOCMND
STOCRLF
STODATAPORT
STODISPLAY
STODSRDY
STOEXAMMEM
STOEXAMREG
STIGETADDR
ЗТОСЕТСНАЯ
STOGETWORD
51000
ЗІОНЕХ
STOINPUT
ЗІОМОУЄ
STOOUTBLANK
ЗІЗОЧТВТТЕ
STACK=0006H
BYTE ARRAY(10) DATA
26 38
PROCEDURE
39 209
643 644
PROCEDURE
257 276
468 492
639
LITERALLY
23 28
PROCEDURE
655
LITERALLY
198
PROCEDURE
650
PROCEDURE
651
PROCEDURE
192 289
PROCEDURE
119. 123
174 190
472 483
PROCEDURE
171 175
515 57”
PROCEDURE
652
PROCEDURE
149 154
PROCEDURE
656
PROCEDURE
654
PROCEDURE
182 187
PROCEDURE
59 50
5ТАСК:0010Н
300 353 362 370 397 (417
530 534 543 549 561 566
42 47
ЗТАСК-0022Н
5ТАСК-0022Н
STACK=001CH
ЗТАСК 290 1ЕН
318 404. 414 430 511 522
5ТАСК:0010Н
126 129 131 142 146 155
288 328 377 386 407 413
598 $92 507 510 51% 921
WORD STACK=0014H
333 389 408 437 455 480
ЗТАСК =0026Н
WORD STACK=0004H
216 217
ЗТАСК 200 1СН
5ТАСК:0022Н
ЗТАСК-0010Н
189 322 327 364 385 (145
ЗТАСК =0012Н
77 79 188 325 453 471
РАСЕ
543
580
165
436
542
484
Р,/М«86
36
128
306
117
181
COMPILER
O2EFH
03B5H
OCE6H
0382H
0360H
_ ОЕрВН
ОбСОН
0682H
ОбЕВН
O4DEH
0027Н
ОВЕЕН
O4B8H
0625H
32
36
9 7
259
43
то
29
23
39
38
9 3
50К86 SERIAL MONITOR
STOOUTCHAR
STOOUTHEADER
STOOUTPUT
STOOUTSTRING
STOOUTWORD
STOREAD
STOREADBYTE
STOREADCHAR
STOREADWORD
STORXRDY
STOSCANBLANK
STOSIGNON
STOSINGLESTEP
STOSTATPORT
STOTESTWORDMODE
STOTXRDY
ЗТОПРОАТЕТР
560 565
5ТАСК-0ООСН
51 63 69 75 118 115
366 367 382 38% 398 399
510 611 640 641 662 574
5ТАСК-0022Н
555 551
5ТАСК-0018Н
STACK=0014H
5ТАСК:0018Н
32% 354 369 383 Yay 444
547 675 677
5ТАСК-001АН
BYTE 5ТАСК-201ОН
5844 587 600 605
BYTE STACK=900AH
581
WORD STACK=9016H
591 594
207
STACK29014H
272
ВҮТЕ ARRAY(23) РАТА
548 557
PROCEDURE
49 23
326 395
532 568
PROCEDURE
539 546
PROCEDURE
857
PROCEDURE
630 671
PROCEDURE
78 133
540 541
PROCEDURE
658
PROCEDURE
223 224
PROCEDURE
216 217
PROCEDURE
585 590
LITERALLY
18 45
PROCEDURE
359 403
630
PROCEDURE
653
LITERALLY
18 цо
622 624
PROCEDURE
317 42g
LITERALLY
40
PROCEDURE
258 285
5ТАСК-2026Н
45 196 198 202 205 207
626 628
5ТАСК-0014Н
464 479
ЗТАСК-0022Н
307
РАСЕ
136
493
675
479
520
Р /М-86
84
105
98
501
512
428
222
219
COMPILER
0431H
0047Ч
0072H
ООООН
0077H
0071Н
ООбЕН
ООбЕН
0060Н
50К86 SERIAL МОМІТОЯ
47 510УАШТОНЕХ
71 SIOVALIDREG
47 SIOVALIDREGFIRST
401 STOWRITE
ЭР
55
SSCOMMAND
STACKBASE
ЗТАСКРТЯ
STANDARDLEN
STARTADDR
1 STARTREC
STEPTRAP
1 STR
PAGE
BYTE STACK=0004H
BYTE 5ТАСК-0008Н
BYTE STACK=0002H
STACK 20026H
393 312
BYTE BASED( PTR! ARRAY(1)
PROCEDURE
151 153
PROCEDURE
143 378
PROCEDURE
140 378
PROCEDURE
659
LITERALLY
239
LITERALLY
238 631
LITERALLY
255
BUILTIN
250 252
BUILTIN
249 251
LITERALLY
551 553
LITERALLI
13 11
BYTE
520 525
LITERALLY
254 263
68 69
BYTE
600 601
BYTE
457 458
BYTE
376 378
BYTE
223. 224
BYTE
216 217
605
я
`
Р /М-86
134
MODULE INFORMATION:
CODE AREA SIZE
CONSTANT AREA SIZE
VARIABLE AREA 5125
MAXIMUM STACK SIZE
1211 LINES READ
COMPILER
006CH
002AH
0000H
0052H
ООЧЕН
9004H
9069H
1
TRUE
USERINITSP
USERSTACK
VECTOR
WORDMODE
ОЕОВН
00004
2078Н
0082H
0 PROGRAM ERROR(S)
END ОР PL/M-35 COMPILATION
SDK36 SERIAL MONITOR
40590
00
1200
660
WORD PARAMETER AUTOMATIC
BYTE
138 183 149
LITERALLY
20 88 101
503 520
LITERALLY
632
STRUCTURE AT
228 231 233
249 250 271
STRUCTURE
281 282
WORD
333 338 339
WORD
136 158 159
58 59 60
ВУТЕ
323
118 122
234
272
238
239
BASED(INTVECTORPTR)
343
161
336
344
359
446
241
458
244
469
PAGE 73
381
246
.